Цвет Androidx Material TextInput не меняется

Я пытаюсь создать com.google.android.material.textfield.TextInputLayout aka TextInputLayout в своем приложении и заставить текст подсказки менять свой цвет в зависимости от наличия текста в поле. Прямо сейчас код этого элемента выглядит так:

 <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/sign_up_email_text_input"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:hint="@string/sign_up_email_hint"
            app:errorEnabled="true"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintVertical_bias="0.57"
            app:layout_constraintWidth_percent="0.78"
            android:textColorHighlight="#FF00FF"
            android:textColorHint="#00FF00"
            style="@style/TextInputLayout"
    >

        <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/sign_up_email_edit_text"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:inputType="textEmailAddress"
        />
    </com.google.android.material.textfield.TextInputLayout>

я применяю стиль

<style name="TextInputLayout" parent="ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox">
    <item name="android:textColorHint">#FFFFFF</item>
    <item name="android:textColor">#FFFF00</item>
    <item name="colorAccent">#FF00FF</item>
    <item name="colorControlNormal">#FF0000</item>
    <item name="colorControlActivated">#00FF00</item>
    <item name="colorControlHighlight">#0000FF</item>
</style>

Но этот стиль применяется только к цвету подсказки, когда он неактивен, и он применяет один и тот же цвет (android:textColorHint) к обоим состояниям подсказки — когда он заполняет текстовое поле и когда он переходит в угол. Когда TextInput получает фокус, метка меняет цвет на colorAccent цвет из ТЕМЫ, а не из стиля, который я применил

Мой вопрос: как я могу изменить цвет метки подсказки в зависимости от наличия текста (не в фокусе TextInput или нет), используя только XML? Я видел примеры того, как люди делали это раньше (в библиотеках поддержки), но сам я не мог добиться такого результата.


person Sergey Salin    schedule 05.03.2019    source источник


Ответы (2)


Та же проблема возникла при переходе на AndroidX.
Изменить родительскую тему

<style name="TextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
    <item name="android:textColorHint">#FFFFFF</item>
    <item name="android:textColor">#FFFF00</item>
    <item name="colorAccent">#FF00FF</item>
    <item name="colorControlNormal">#FF0000</item>
    <item name="colorControlActivated">#00FF00</item>
    <item name="colorControlHighlight">#0000FF</item>
</style>
person Shweta Chauhan    schedule 05.03.2019
comment
Попробуйте удалить родителя, так как это не требуется. - person Sarthak Gandhi; 05.03.2019
comment
@SarthakGandhi: Да, без родителя это работает. Благодарность - person Shweta Chauhan; 05.03.2019
comment
Пытался использовать вашу родительскую тему parent=Widget.MaterialComponents.TextInputLayout.FilledBox. Все еще не работает, как я хочу, чтобы он работал. Ничего не меняется, когда я полностью удаляю родительскую тему - person Sergey Salin; 05.03.2019

Была такая же проблема. Проблема связана с com.google.android.material:material:1.1.0-alphaXX. Проблема была решена путем возврата к com.google.android.material:material:1.0.0.

Примечание: я даже не могу раздуть макет, содержащий TextInputLayout, при использовании com.google.android.material:material:1.1.0-alpha08. 1.1.0 кажется полным проблем.

person persiaprince    schedule 23.07.2019