Что бы я хотел сделать, это изменить состояние (на самом деле, фон) EditText, чтобы отразить правильность его содержимого. Например. если пользователь входит в 999, где 999 является контекстуально недействительным, EditText должен иметь красную рамку вместо оранжевой границы по умолчанию, аналогично тому, как текст действителен, она должна иметь зеленую границу.Android: возможность просмотра/рисования пользовательских стилей?
Методы я исследовал:
- Изменение стиля EditText программно через что-то вроде editor.setStyle (R.styles.SomeID). Кажется, это невозможно в андроиде.
- Добавление пользовательских состояний (state_valid, state_invalid) в R.attr, связывание их с красными/зелеными 9-патчами, а затем вызов drawable.setState() с одним из этих состояний. Это работало в том смысле, что состояние можно было прочитать через getState(), но граница не меняла цвет.
- Установка фона ресурса непосредственно при обнаружении (в) действительности. Это работает нормально, вызывая правильный визуальный эффект, но кажется немного хоккеем и допускает только одно состояние (например, мне нужно вручную проверить, нажата ли клавиша EditText, включена ли и т. Д.).
Учитывая ограниченный пользовательский интерфейс, я не решаюсь ввести отдельный элемент пользовательского интерфейса, чтобы визуально откликнуться на достоверность текста для пользователя, поэтому мое желание отобразить его в самом EditText.
Итак .. это что-то, что даже возможно? Это похоже на довольно распространенный случай использования, так кто-нибудь достиг того, что я пытаюсь сделать в простой и элегантной манере?
Спасибо за ответ. Моя проблема с третьим подходом заключается в том, что я должен выполнить определенную работу для проверки каждого состояния или комбинации, например. EditText может быть нажата-разрешена, или недопустима, и недействительна, и т. д., в результате чего мой подкласс должен проверить каждую возможную комбинацию, чтобы отобразить правильный фон. Это кажется неуклюжим и неэлегантным, не говоря уже о нарушении СУХОЙ. – Simon