TextInputLayout - setError не меняет цвет плавающей подсказки на цвет ошибки

У меня проблема с состоянием ошибки TextInputLayout. Когда я устанавливаю ошибку в TextInputLayout, сообщение об ошибке выделяется красным цветом вместе с подчеркиванием, но подсказка этого не делает (цвет по умолчанию остается серым). Я поэкспериментировал с настройкой errorTextAppearance, но, похоже, не могу получить текст подсказки для изменения цвета.

<android.support.design.widget.TextInputLayout
            android:id="@+id/textInputLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="My Hint"
            app:errorTextAppearance="@style/MyErrorTextAppearance">

<android.support.design.widget.TextInputEditText
                android:id="@+id/editText1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="number"
                android:maxLength="10"
                android:maxLines="1" />

styles.xml

<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="MyErrorTextAppearance" parent="TextAppearance.Design.Error">
    <item name="android:textColor">@color/colorError</item>
</style>

Я установил и убрал ошибку следующим образом:

myTextInputLayout.setErrorEnabled(true);
myTextInputLayout.setError(errorMessage);

myTextInputLayout.setError(null);
myTextInputLayout.setErrorEnabled(false);

0 ответов

Попробуйте следующий код:

fun setHintColor(@ColorInt color: Int)
{
    try {
        var stateList = ColorStateList(arrayOf(intArrayOf(0)), intArrayOf(color))
        val defaultTextColorField = TextInputLayout::class.java.getDeclaredField("mDefaultTextColor")
        defaultTextColorField?.let {field->
            field.isAccessible = true
            field.set(this, stateList)
        }
        val focusedTextColorField = TextInputLayout::class.java.getDeclaredField("mFocusedTextColor")
        focusedTextColorField?.let{field->
            field.isAccessible = true
            field.set(this, stateList)
        }
    }catch(e: java.lang.Exception){
        // handle exception
    }
}
Другие вопросы по тегам