Спиннер с ошибкой в ​​Android

Я использую Spinner с новым стилем

Base.Widget.AppCompat.Spinner.Underlined

Я вижу подчеркивание, и линия отображается с акцентным цветом, пока я выбираю параметр.

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

Чтобы увидеть ошибку, попробуйте добавить новую учетную запись в любое из приложений Google. Он спросит у вас дату рождения. Введите неверную дату и нажмите «Далее».

Есть ли способ сделать это без использования сторонней библиотеки MaterialSpinner?

Скриншот приложения Google


person kingston    schedule 30.09.2016    source источник


Ответы (1)


Прежде всего: различные страницы, которые вы видите при создании новой учетной записи Google на своем устройстве, представляют собой просто WebView. Поэтому они не используют нативные компоненты/виджеты.

По умолчанию виджет Spinner не имеет setError(...), например EditText (который, кстати, является производным от TextView). Таким образом, чтобы отобразить ошибку внутри Spinner, вы должны сначала получить представление текущего выбранного элемента и преобразовать его в TextView (см. этот ответ).
Примечание. ClassCastException возникнет, если вы используете макет, корневой элемент которого не является TextView.

Вот подвох этого подхода: оно не будет выглядеть как сообщение об ошибке в вашем примере или сообщение об ошибке TextInputLayout.
Поэтому для достижения желаемого эффекта вам придется использовать стороннюю библиотеку или реализовать ее на твой собственный.

Дополнительное примечание: если вы посмотрите на исходный код библиотеки MaterialSpinner, которую вы можно увидеть, что он расширяет класс AppCompatSpinner и добавляет дополнительные методы, такие как метод setError, о котором вы упомянули. Если вы посмотрите на onDraw(...) вы можете увидеть, как отображается ошибка.

person reVerse    schedule 01.10.2016