Как изменить цвет плавающей метки TextInputLayout и курсора, не изменяя `colorAccent` в` AppTheme` - PullRequest
0 голосов
/ 25 июня 2019

Этот вопрос связан с двумя другими вопросами, которые я специально назову ниже.Разница в том, что я специально спрашиваю, как изменить цвет без использования основы AppTheme.

. В первом связанном вопросе предлагаемое решение включает настройку * 1006.*

<item name="colorAccent">@color/Color Name</item> in AppTheme

Тем не менее, он также говорит о том, чтобы создать тему / стиль специально для TextInputLayout, который выглядит следующим образом:

<style name="TextLabel" parent="TextAppearance.AppCompat">
    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@color/Color Name</item> 
    <item name="android:textSize">20sp</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@color/Color Name</item>
    <item name="colorControlNormal">@color/Color Name</item>
    <item name="colorControlActivated">@color/Color Name</item>
</style>

ТакcolorAccent устанавливается дважды.Я попробовал это и пришел к выводу, что конкретная тема для TextInputLayout не нужна, так как я получил тот же результат, с ним и без него.Достаточно установить только colorAccent в AppTheme.Это работает, но не обязательно то, что мне нужно / нужно.

Во втором втором связанном вопросе люди снова предлагают изменить AppTheme и настройку colorAccent (и другиеатрибуты).

Однако я не считаю это решение правильным / удовлетворительным.Должен быть способ конкретно изменить этот один цвет без изменения стиля всего приложения, которое человек, задающий второй вопрос, также критикует в одном из своих комментариев.

Итак, что яЯ специально ищу здесь , это решение, в XML или программно, чтобы конкретно изменить цвет плавающей подсказки / метки и курсора из TextInputLabel + TextInputEditText Combo.В основном такое же поведение, которое я получал бы при установке colorAccent.

Есть ли способ сделать это, или разработчики SDK серьезно сделали это возможным, только установив colorAccent?

PS Я понимаю, что это может сработать с созданием новой Темы, унаследованной от AppTheme и установкой в ​​нее действий, которые я хочу иметь определенного цвета.Однако, как я уже сказал, это не то, что я ищу.

Ответы [ 3 ]

2 голосов
/ 25 июня 2019

Создайте собственный стиль, подобный этому:

    <style name="myInputText">
     <item name="android:textColor">@color/myColor</item>
     <item name="android:textSize">@dimen/text_size</item>
     ...
     </style>

Теперь вы можете напрямую использовать это в TextInputLayout, не нужно указывать какого-либо родителя в стиле или менять тему приложения.

<android.support.design.widget.TextInputLayout
    android:textColorHint="@color/myColor" 
    app:hintTextAppearance="@style/myInputText"
    android:layout_width="match_parent"
    android:layout_height="50dp">

EDIT

Это только меняет цвет плавающей метки, но не курсора. Чтобы также изменить цвет курсора, вам нужно создать чертеж:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <size android:height="10dp"
          android:width="2dp"/>
    <solid android:color="@color/myColor"/>
</shape>

и добавьте его к стилю, который вы используете для TextInputEditText, , а не * TextInputLayout.

<style name="Settings.TextInputEditText">
    ...
    <item name="android:textCursorDrawable">@drawable/cursor</item>
</style>
0 голосов
/ 25 июня 2019

Поменяй цвет на res / color - и твой любимый цвет, как определить 3 цвета, ты можешь изменить эффект

0 голосов
/ 25 июня 2019

Вы можете попытаться установить colorAccent для нужных вам видов, только ... Что-то вроде:

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:theme="@style/AppThemeInputLayout" />

Затем в styles.xml

<style name="AppThemeInputLayout" parent="AppTheme">
    <item name="colorAccent">#FF0000</item>
</style>

Iугадайте, таким образом, вы можете изменить colorAccent только для определенных видов (а не для всего приложения)

Дайте мне знать, если это работает для вас .. В противном случае, я удалю этот ответ.

...