Как установить цвет сообщения об ошибке TextInputLayout?



как я могу изменить цвет сообщения об ошибке, которое может отображаться под текстовым полем в TextInputLayout (через setError(...) -посмотреть ошибки здесь)?



обычно он отображается как красный цвет, который я хочу изменить. Какие имена элементов / ключи я должен использовать в моем styles.xml файл для таргетинга цвета?



спасибо заранее.




Edit:



добавил app:errorTextAppearance ключ к моему TextInputLayout:



<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:id="@+id/welcome_current_week_container"
app:errorTextAppearance="@style/WelcomeErrorAppearance">
<EditText
..../>
</android.support.design.widget.TextInputLayout>
</LinearLayout>


и появление ошибки (установите зеленый для тестирования):



<style name="WelcomeErrorAppearance" parent="@android:style/TextAppearance">
<item name="android:textColor">@android:color/holo_green_dark</item>
</style>


в результате подсказка, а также сообщение об ошибке окрашены (скриншоты из масштабируемого эмулятора Android):



обычный (не ошибка):



Before Image



ошибка состояния:



After Image



изменить 2/итог:



когда появляется сообщение об ошибке, подсказка над полем изменяется на тот же цвет, что и сообщение об ошибке, переопределяя цвет подсказки – это по дизайну.

451   6  

6 ответов:

создать пользовательский стиль, который использует @android:style/TextAppearance как родитель styles.xml file:

<style name="error_appearance" parent="@android:style/TextAppearance">
    <item name="android:textColor">@color/red_500</item>
    <item name="android:textSize">12sp</item>
</style>

и использовать его в вашем textinputlayout виджет:

 <android.support.design.widget.TextInputLayout
            android:id="@+id/emailInputLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:errorTextAppearance="@style/error_appearance">

error example

Edit: установите подсказку на объект, который находится внутри вашего TextInputLayout (EditText,TextView и т. д.) чтобы держать разные цвета для подсказки и ошибки.

на самом деле, чтобы изменить цвет сообщения об ошибке, вы можете установить textColorError в вашей теме (а также установить colorControlNormal и colorControlActivated для общего виджета и цвета текста подсказки). TextInputLayout поднимает этот атрибут. Примечание: если вы устанавливаете errorTextAppearance пользовательский стиль, то textColorError не будет иметь никакого эффекта.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorControlNormal">@color/control_normal</item>
    <item name="colorControlActivated">@color/control_activated</item>
    <item name="textColorError">@color/error</item>
    <!-- other styles... -->
</style>

и в вашем AndroidManifest.XML-код:

<application
    android:theme="@style/AppTheme"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">

    <!-- ... -->

</application>

мне нужно сделать это динамически. Использование отражения:

public static void setErrorTextColor(TextInputLayout textInputLayout, int color) {
  try {
    Field fErrorView = TextInputLayout.class.getDeclaredField("mErrorView");
    fErrorView.setAccessible(true);
    TextView mErrorView = (TextView) fErrorView.get(textInputLayout);
    Field fCurTextColor = TextView.class.getDeclaredField("mCurTextColor");
    fCurTextColor.setAccessible(true);
    fCurTextColor.set(mErrorView, color);
  } catch (Exception e) {
    e.printStackTrace();
  }
}

нужно позвонить textInputLayout.setErrorEnabled(true) перед вызовом метода для этой работы.

одна сторона Примечание. Я попробовал принятое решение один с errorTextAppereance. Он работает очень хорошо, но сначала цвет подчеркивания ввода не менялся после применения нового errorTextAppereance стиль. Я вижу, что есть несколько комментариев и что другие люди испытывают ту же проблему.

в моем случае это происходило, когда я устанавливал новый стиль после установки нового текста ошибки. Вот так:

passwordInputLayout.error = "Password strength"
passwordInputLayout.setErrorTextAppearance(R.style.InputError_Purple)

после изменения порядка этих двух методов текст и подчеркните изменения цвета, как ожидалось.

passwordInputLayout.setErrorTextAppearance(R.style.InputError_Purple)
passwordInputLayout.error = "Password strength"

и стиль оформления текста ошибки выглядит примерно так:

<style name="InputError" parent="TextAppearance.Design.Error"/>
<style name="InputError.Purple">
    <item name="android:textColor">@color/purple</item>
</style>

модифицированная версия ответа @jared, которая работает в моем случае:

public static void setErrorTextColor(TextInputLayout textInputLayout, int color) {
    try {
        Field fErrorView = TextInputLayout.class.getDeclaredField("mErrorView");
        fErrorView.setAccessible(true);
        TextView mErrorView = (TextView)fErrorView.get(textInputLayout);
        mErrorView.setTextColor(color);
        mErrorView.requestLayout();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Я заглянул в источник TextInputLayout и понял, что цвет текста ошибки получается из цветов.XML. Просто добавьте это к вашим цветам.XML-код:

<color name="design_textinput_error_color_light" tools:override="true">your hex color</color>

Comments

    Ничего не найдено.