Как заметил автор вопроса THIS , Google показал, что подсказка TextInputLayout должна быть того же цвета, что и сообщение об ошибке.
И я сделал это:
class CustomTextInputLayout(context: Context, attrs: AttributeSet) : TextInputLayout(context, attrs) {
override fun setError(error: CharSequence?) {
super.setError(error)
resetBackground()
}
override fun setErrorEnabled(enabled: Boolean) {
super.setErrorEnabled(enabled)
resetBackground()
changeHintColor(enabled)
}
override fun drawableStateChanged() {
super.drawableStateChanged()
resetBackground()
}
private fun resetBackground() {
editText?.apply {
val drawable = ContextCompat.getDrawable(context, R.drawable.selector_edit_text_background)
background = drawable
background.colorFilter = DrawableCompat.getColorFilter(drawable ?: ColorDrawable(Color.WHITE))
}
}
private fun changeHintColor(error: Boolean) {
setHintTextAppearance(
if (error) {
R.style.TextInputLayoutHintErrorStyle
} else {
R.style.TextInputLayoutHintNormalStyle
}
)
}
}
Теперь это работает как шарм, но есть еще одна вещь, которую я хочу сделать и не могу достичь. Когда я перемещаю фокус из моего TextInputLayout
EditText
в состоянии ошибки, цвет подсказки снова становится обычным цветом. Когда я возвращаю фокус к этому TextInputLayout
, EditText
цвет подсказки превращается в цвет ошибки.
Как сделать так, чтобы цвет подсказки всегда оставался неизменным, если TextInputLayout
в состоянии ошибки? Неважно, есть фокус или нет.