Как установить цвет сообщения об ошибке 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):
обычный (не ошибка):
ошибка состояния:
изменить 2/итог:
когда появляется сообщение об ошибке, подсказка над полем изменяется на тот же цвет, что и сообщение об ошибке, переопределяя цвет подсказки – это по дизайну.
6 ответов:
создать пользовательский стиль, который использует
@android:style/TextAppearanceкак родительstyles.xmlfile:<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">
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