Индикаторы ошибок (для проверки формы) не отображаются для Android 4.2?
Фон
На Android вы можете установить индикацию ошибки для любого представления EditText, когда вы хотите показать пользователю, что то, что там напечатано (или не напечатано), неверно (так называемая "проверка формы").
Есть даже хорошая библиотека для этого ( здесь), и многие посты здесь доступны о том, как ее использовать.
Все работало хорошо для меня, пока я не запустил его на Nexus 4 с Android 4.2.
Эта проблема
Иногда он просто не отображает значки ошибок. В таком случае, только когда я даю фокус editText (у которого есть проблема), он показывает пузырь, но он пуст и не показывает значок ошибки.
Также во всех случаях пузырьки всегда пусты.
Почему это происходит, и как я могу это исправить?
Примечание: я использую библиотеку actionBarSherlock, поэтому мне нужно использовать их темы или темы, основанные на их.
РЕДАКТИРОВАТЬ:
Вот несколько скриншотов:
Android 4.2.2:
Android 2.3.5:
РЕДАКТИРОВАТЬ:
После того, как я подумал, что это было решено само собой, я наконец-то выяснил, когда возникает эта ошибка: если фокус находится на другом editText, в котором нет ошибки, а ошибка проверки - на другом editText, индикатор не 't показывается, пока editText не получает фокус.
1 ответ
Проблема 1: Проблема в теме приложения. Попробуйте изменить тему на более темную, например:
<style name="AppBaseTheme" parent="android:Theme.Black">
и это должно решить вашу проблему. Я нашел эту похожую проблему ранее и исправил это, изменив тему. Но я мало исследовал, но чувствую, что это проблема Android, и пузырь должен попытаться изменить цвет текста в соответствии с темой.
Дайте мне знать, решит ли это вашу проблему или нет.
Проблема 2: Другая проблема, о которой вы говорите, не фокусируясь, вы можете рассмотреть следующую ссылку: усечение текста и проблема фокуса.
---------------------------------------- Обновленный ответ -------- -------------------------------------
Q1) What should I add to the theme configuration in order for it to always work, no matter what theme I use?
Согласно моим выводам, вот некоторые результаты:
[ Примечание: применимо только для устройств с версией 3.0 и выше]
Если ваша цель сборки:
менее 11, затем с помощью
parent="android:Theme.Light" --> setError() message doesn't work or shows very faded text colour almost blending with color white parent="android:Theme" --> setError() message works
больше 11, затем с помощью
parent="android:Theme.Holo.Light" --> setError() message works parent="android:Theme.Holo" --> setError() message works
Поскольку ваш проект поддерживается для устройств с уровнем API ниже 11, а вы хотите поддерживать 4.0 и более поздние версии, лучшим вариантом будет пойти и интегрировать HoloEverywhere в ваш проект, что решит вашу проблему, и вы сможете использовать свой ActionBarSherlock тоже, для совместимости, проверьте это ТАК сообщение.
Q2) What are the available configurations for the error indication UI ?
В основном вы можете настроить рисование и значки, но я сомневаюсь, что вы сможете настроить свой текст и фон (если кто-то знает, может указать на это)
Я бы посоветовал вам проверить этот SO Post для немедленных ответов.
И для правильного фокуса, для каждой проверки правильности вы можете разместить этот код:
EditText.setFocusableInTouchMode(true);
EditText.requestFocus();
EditText.setError("My Error Text");
Дайте мне знать по любым вопросам.