Изменение цвета нижней линии EditText в appcompat v7
Быстрый ответ
Для того чтобы изменить цвет подчеркивающей линии EditText
в AppCompat v7
, вам потребуется следующий фрагмент кода:
ColorStateList colorStateList = ColorStateList.valueOf(Color.RED);
yourEditText.setBackgroundTintList(colorStateList);
Настройка темы приложения для EditText
Разбор атрибутов темы и их влияния
Для оформления элементов EditText
в вашем приложении вы можете переопределить атрибуты colorControlActivated
, colorControlHighlight
и colorControlNormal
. Это позволит вам управлять цветом нижней строки в зависимости от состояния элемента контроля.
Присвоение улучшенной темы Activity
Для того чтобы применить созданную тему к указанной Activity, добавьте следующее определение в вашу разметку:
<activity android:name=".FocusedActivityName" android:theme="@style/EnhancedAppTheme"></activity>
Таким образом, ваша тема будет применена ко всем элементам EditText
в выбранной Activity.
Создание индивидуальной темы AppCompat
Изъявите эффективность AppCompat
, создав свою тему:
<style name="EnhancedAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorControlActivated">@color/normal_blue</item>
<item name="colorControlHighlight">@color/highlighting_purple</item>
<item name="colorControlNormal">@color/game_of_greys_item</item>
</style>
Совместимость с разными версиями
Для устройств с API уровнем 21 и выше применяйте атрибут android:backgroundTint
. Для более ранних версий API используйте app:backgroundTint
. Важно корректно применять методы setBackground
или setBackgroundDrawable
в зависимости от версии API.
Визуализация
Следите за тем, как меняется цвет нижней строки EditText
, словно это светофор:
Обычное состояние: 🚦(серый) ==> 🚦(нормальный цвет)
Для изменения цвета воспользуйтесь следующим кодом:
yourEditText.setBackgroundTintList(ColorStateList.valueOf(Color.BLUE));
И теперь изменение будет выглядеть так:
Синее состояние: 🚦(синий) ==> 🚦(синий цвет)
Для внедрения в AppCompat v7
напишем:
<EditText
android:backgroundTint="@color/blue" />
Теперь элемент EditText
следует установленным нами правилам!
Советы и технические хитрости для более продвинутых настроек
Настройка конкретного EditText
Если вам нужно настроить внешний вид отдельного EditText
, примените следующий код:
Drawable drawable = yourEditText.getBackground();
drawable.mutate().setColorFilter(ContextCompat.getColor(context, R.color.the_chosen_one), PorterDuff.Mode.SRC_ATOP);
yourEditText.setBackground(drawable);
Использование XML-стилизации для разных уровней API
Определите в XML отдельные цветовые атрибуты для различных уровней API, чтобы обеспечить лучшую совместимость и удобство управления стилями:
<color name="editTextUnderlineColor">#FF5722</color>
Эффективное применение мутаций Drawable
Функция mutate()
обеспечивает уникальное оформление EditText
, предотвращая случайные изменения в оформлении других элементов.
Оформление отдельных элементов
При стилизации отдельных элементов с помощью appcompat-v7
убедитесь, что эти изменения не затрагивают общие стили.
Повышение цветовой консистентности
Примените следующий код для обеспечения единого цветового оформления в приложении:
<EditText
android:backgroundTint="@color/consistent_color_resource" />
Полезные материалы
- EditText | Разработчики Android – документация и описание
EditText
для Android. - Drawable ресурсы | Разработчики Android – руководство по работе с
drawable ресурсами
. - Material Design – принципы оформления полей
EditText
в соответствии с рекомендациями Material Design. - Тематизация с помощью AppCompat от Иэна Лейка | Разработчики Android – обзор методов и советов по созданию тем при помощи AppCompat.
- Главная · codepath/android_guides Wiki · GitHub – подробное руководство по стилизации с использованием AppCompat, включая элемент
EditText
. - Использование App Toolbar | CodePath Android Cliffnotes – рекомендации по настройке панели инструментов и других элементов приложения.