Использовать пользовательский цвет текста подсказки для подсказок во включенных и отключенных представлениях

Я пытаюсь добавить пользовательские стили в TextInputLayout и TextInputEditText и не могу получить ожидаемых результатов. Что мне нужно, так это иметь собственный цвет «A» для подсказок в включенных представлениях и собственный цвет «B» для подсказок в отключенных представлениях.

Прямо сейчас у меня есть стиль с включенным/отключенным селектором подсказок. Это стиль:

<style name = "CustomTextInputLayoutStyle" parent = "Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
    <item name = "boxStrokeColor">@color/input_blue</item>
    <item name = "boxStrokeWidth">2dp</item>
    <item name = "errorTextAppearance">@style/ErrorText</item>
    <item name = "android:textColorHint">@color/selector_edithintcolor</item>
</style>

Вот селектор, вы можете увидеть цвет, чтобы подчеркнуть: Использовать пользовательский цвет текста подсказки для подсказок во включенных и отключенных представлениях

Теперь некоторые компоненты в макете:

<com.google.android.material.textfield.TextInputLayout
    android:id = "@+id/layout_text_disabled"
    style = "@style/CustomTextInputLayoutStyle"
    android:layout_width = "0dp"
    android:layout_height = "wrap_content"
    android:layout_marginStart = "32dp"
    android:layout_marginTop = "32dp"
    android:layout_marginEnd = "32dp"
    app:layout_constraintEnd_toEndOf = "parent"
    app:layout_constraintStart_toStartOf = "parent"
    app:layout_constraintTop_toBottomOf = "@id/layout_phone_not_focused">

    <com.google.android.material.textfield.TextInputEditText
        android:id = "@+id/txt_text_disabled"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:hint = "@string/hint_deactivated"
        android:inputType = "text"
        android:text = "@string/txt_disabled" />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
    android:id = "@+id/layout_text_disabled_hint"
    style = "@style/CustomTextInputLayoutStyle"
    android:layout_width = "0dp"
    android:layout_height = "wrap_content"
    android:layout_marginStart = "32dp"
    android:layout_marginTop = "32dp"
    android:layout_marginEnd = "32dp"
    app:layout_constraintEnd_toEndOf = "parent"
    app:layout_constraintStart_toStartOf = "parent"
    app:layout_constraintTop_toBottomOf = "@id/layout_text_disabled">

    <com.google.android.material.textfield.TextInputEditText
        android:id = "@+id/txt_text_disabled_hint"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:hint = "@string/hint_deactivated"
        android:inputType = "text" />
</com.google.android.material.textfield.TextInputLayout>

Кроме того, у меня есть кнопка для изменения состояния этих двух представлений с включенного на отключенное, вот поведение:

Когда представления включены, все идет как положено, подсказки имеют зеленый цвет в соответствии с селектором: Использовать пользовательский цвет текста подсказки для подсказок во включенных и отключенных представлениях

Теперь, когда я отключаю представления, это то, что я получаю: Использовать пользовательский цвет текста подсказки для подсказок во включенных и отключенных представлениях

Есть идеи, как сделать отключенные подсказки оранжевыми в соответствии с селектором? Заранее спасибо!

Возможный дубликат Как изменить цвет плавающей метки TextInputLayout

Nikos Hidalgo 08.07.2019 18:19
2
1
840
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

После этого связь кажется, что теперь это возможно с версией 1.2.0-alpha03 com.google.android.material:material Вам нужно создать список состояний цвета следующим образом:

box_stroke_color_state_list.xml

<selector xmlns:android = "http://schemas.android.com/apk/res/android">
    <item android:color = "?colorPrimary" android:state_enabled = "true" />
    <item android:color = "?colorSecondary" android:state_hovered = "true" />
    <item android:color = "?colorSecondary" android:state_focused = "true" />
    <!-- This is where the disable hint and box will take it's color -->
    <item android:alpha = "@dimen/material_emphasis_disabled" android:color = "@android:color/holo_green_dark" android:state_enabled = "false" />
    <item android:color = "@color/mtrl_textinput_default_box_stroke_color" />
</selector>

а затем вызовите его в своем коде:

ContextCompat.getColorStateList(context, R.color.box_stroke_color_state_list)?.let {
    layout_text_disabled_hint.setBoxStrokeColorStateList(it)
}

Основываясь на ответе @Caktuspace, вы можете подать заявку следующим образом:

макет.xml

<com.google.android.material.textfield.TextInputLayout
    android:id = "@+id/til"
    ...
    android:hint = "@string/hello"
    android:textColorHint = "@color/hint_text_color_textinputlayout">

hint_text_color_textinputlayout.xml

<selector xmlns:android = "http://schemas.android.com/apk/res/android">
    <item android:alpha = "@dimen/material_emphasis_disabled" android:color = "@color/desiredColorDisabled" android:state_enabled = "false" />
    <item android:color = "@color/desiredColorEnabled" />
</selector>

Другие вопросы по теме