Changing EditText bottom line color with appcompat v7
Изменение цвета нижней строки EditText с помощью appcompat v7
Я использую appcompat v7, чтобы обеспечить согласованный внешний вид на Android 5 и ниже. Работает довольно хорошо. Однако я не могу понять, как изменить цвет нижней строки и цвет акцента для EditTexts. Возможно ли это?
Я пытался определить пользовательский android:editTextStyle (см. Ниже), но мне удалось изменить только полный цвет фона или цвет текста, но не нижнюю строку и не цвет акцента. Есть ли конкретное значение свойства для использования? должен ли я использовать пользовательское рисованное изображение через android:background свойство? невозможно указать цвет в hexa?
Согласно источникам Android API 21, EditTexts с material design, похоже, используют colorControlActivated и colorControlNormal. Поэтому я попытался переопределить эти свойства в предыдущем определении стиля, но это не дало эффекта. Вероятно, appcompat его не использует. К сожалению, я не могу найти исходные тексты для последней версии appcompat с material design.
Переведено автоматически
Ответ 1
Наконец, я нашел решение. Оно просто заключается в переопределении значения для colorControlActivated, colorControlHighlight и colorControlNormal в определении темы вашего приложения, а не в вашем стиле edittext. Затем подумайте о том, чтобы использовать эту тему для любых действий, которые вы пожелаете. Ниже приведен пример:
Хотя решение Лоренца правильное, оно имеет некоторые недостатки, как описано в комментариях, поскольку окрашивается не только нижняя строка EditText, но и кнопка "Назад" Toolbar, CheckBoxes и т.д.
К счастью, v22.1 of appcompat-v7 представила несколько новых возможностей. Теперь можно назначить определенную тему только для одного представления. Прямо из журнала изменений:
Устаревшее использование приложения: тема для оформления панели инструментов. Теперь вы можете использовать Android: theme для панелей инструментов на всех устройствах с API уровня 7 и выше и android: поддержка темы для всех виджетов на устройствах с API уровня 11 и выше.
Итак, вместо установки желаемого цвета в глобальной теме мы создаем новую и назначаем ее только для EditText.
Пример:
<style name="MyEditTextTheme"> <!-- Used for the bottom line when not selected / focused --> <item name="colorControlNormal">#9e9e9e</item> <!-- colorControlActivated & colorControlHighlight use the colorAccent color by default --> </style>