Я пытаюсь добавить пользовательские стили в 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>
Кроме того, у меня есть кнопка для изменения состояния этих двух представлений с включенного на отключенное, вот поведение:
Когда представления включены, все идет как положено, подсказки имеют зеленый цвет в соответствии с селектором:

Теперь, когда я отключаю представления, это то, что я получаю:

Есть идеи, как сделать отключенные подсказки оранжевыми в соответствии с селектором? Заранее спасибо!
После этого связь кажется, что теперь это возможно с версией 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>
Возможный дубликат Как изменить цвет плавающей метки TextInputLayout