正如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
的{{1}}时,提示色再次变为常规色。当我将焦点移回此EditText
的{{1}}时,提示颜色变为错误颜色。
如果TextInputLayout
处于错误状态,如何使提示颜色始终保持不变?不管有没有焦点。