Как написать стиль в текст ошибки EditText в Android?

Я пытаюсь написать новый пользовательский стиль для моего приложения для Android. Мне нужно указать стиль errorText, который появляется после установки setError в EditText .

Как я могу настроить его стиль?

Например: я хочу установить белый background и textColor : синий и т. Д. И т. Д. В style.xml

Введите описание изображения здесь

Решение находится в конце, и вот скриншот:

Стилированная ошибка


Некоторое Объяснение

Возможно, вы можете установить цвет текста, используя следующую строку

 yourEditText.setError(Html.fromHtml("<font color='blue'>this is the error</font>")); 

Однако это может быть не гарантировано.


Согласно исходному коду, этот Popup ErrorPopup имеет тип ErrorPopup который является внутренним классом внутри TextView . Содержимое этого Popup представляет собой единый TextView завышенный от com.android.internal.R.layout.textview_hint

 final TextView err = (TextView) inflater.inflate(com.android.internal.R.layout.textview_hint, null); 

Фон этого Popup зависит от того, следует ли разместить его над якорем:

 if (above) { mView.setBackgroundResource(com.android.internal.R.drawable.popup_inline_error_above); } else { mView.setBackgroundResource(com.android.internal.R.drawable.popup_inline_error); } 

Поскольку все ресурсы андроида, используемые для создания всплывающих окон, являются внутренними и в конечном итоге жестко закодированными, ваш лучший снимок – это создать собственное всплывающее окно ошибки. Это было бы очень легко, и вы бы действительно не вмешивались в обычный EditText потому что всплывающее окно по умолчанию просто используется для отображения ошибки, и, таким образом, создание собственного было бы в порядке.


РЕШЕНИЕ

Я создал его здесь: WidgyWidgets

Я не думаю, что вы можете настроить свой стиль таким образом, поскольку всплывающее окно ошибки использует внутренний стиль :

 mPopupInlineErrorBackgroundId = getResourceId(mPopupInlineErrorBackgroundId, com.android.internal.R.styleable.Theme_errorMessageBackground); mView.setBackgroundResource(mPopupInlineErrorBackgroundId); 

Однако вы можете установить значок setError(CharSequence, Drawable) и custom error с помощью перегруженного setError(CharSequence, Drawable) .

Вы можете легко создать Spanned из HTML, используя fromHtml() .

Тем не менее, вы все равно не сможете установить всплывающее фоновое изображение 🙁

Пожалуйста, добавьте его во время проверки формы, если текстовое поле редактирования пуст.

  int ecolor = R.color.black; // whatever color you want String estring = "Please enter a valid email address"; ForegroundColorSpan fgcspan = new ForegroundColorSpan(ecolor); SpannableStringBuilder ssbuilder = new SpannableStringBuilder(estring); ssbuilder.setSpan(fgcspan, 0, estring.length(), 0); edtEmail.requestFocus(); edtEmail.setError(ssbuilder); 

Когда вы пишете текст редактирования, автоматически включается знак ошибки

Спасибо Sachin

Я видел принятый ответ, но мне не нравится предлагаемая библиотека

Я думаю, что это ошибка в платформе Android, и я здесь указал ошибку: https://code.google.com/p/android/issues/detail?id=158590

EDIT: библиотека дизайна android. Виджет TextInputLayout может использоваться для получения лучшей обработки ошибок в EditText.

Посмотрите, как это выглядит здесь: https://www.youtube.com/watch?v=YnQHb0fNtF8

И как реализовать здесь: http://code.tutsplus.com/tutorials/creating-a-login-screen-using-textinputlayout–cms-24168

Перейдите по этой ссылке, чтобы иметь приятный внешний вид сообщения об ошибке! materialdoc Скриншот