Что бы я хотел сделать, это изменить состояние (на самом деле, фон) EditText, чтобы отразить правильность его содержимого. Например. если пользователь входит в 999, где 999 является контекстуально недействительным, EditText должен иметь красную рамку вместо оранжевой границы по умолчанию, аналогично тому, как текст действителен, она должна иметь зеленую границу.
Методы, которые я изучил:
Учитывая ограниченный потенциал пользовательского интерфейса, я не решаюсь ввести отдельный элемент пользовательского интерфейса для визуальной обратной связи с текстом для пользователя, поэтому мое желание отобразить его в самом EditText.
Итак... это что-то, что даже возможно? Это похоже на довольно распространенный случай использования, так кто-нибудь достиг того, что я пытаюсь сделать в простой и элегантной манере?
Я бы рекомендовал изменить цвет текста, чтобы указать правильность, а не изменять цвет кольца фокусировки с помощью любого из описанных вами методов (из которых только # 3 кажется практичным).
Другая возможность - попробовать setCompoundDrawablesWithIntrinsicBounds()
изменить значок слева или справа от содержимого EditText
для указания действительности. Я помню, как обсуждал эту технику с кем-то несколько месяцев назад и забыл, получили ли они ее работу или нет.
И, конечно, другой вариант - не допускать недопустимый ввод, через настраиваемый фильтр ввода или прослушиватель или что-то в этом роде.
Хорошо, я бы просто расширил класс EditText и построил желаемую функциональность сверху (используя третий подход, который вы предлагаете, потому что он работает:-)). Выполняя это, вы должны идти только один раз и открываете для изменения своей реализации, как только вы знаете лучший способ (я бы лично решил это, используя третий подход, кажется мне хорошим).
Я думаю, что вызов invalidateDrawable (yourDrawable) будет работать с подходом номер 2. я не пытался... но это имеет смысл