Изменение цвета нижней строки EditText с помощью appcompat v7

Я использую appcompat v7, чтобы получить представление на Android 5 и меньше. Он работает довольно хорошо. Однако я не могу понять, как изменить цвет нижней строки и цвет акцента для android: editTextStyles. Является ли это возможным?

Я попытался определить пользовательский интерфейс android:background(см. Ниже), но мне удалось изменить полный цвет фона или цвет текста, но не нижнюю строку или цвет акцента. Существует ли конкретное значение свойства для использования? мне нужно использовать пользовательское изображение с возможностью рисования через свойство? Невозможно указать цвет в гекса? <style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:editTextStyle">@style/Widget.App.EditText</item> </style> <style name="Widget.App.EditText" parent="Widget.AppCompat.EditText"> ??? </style>

colorControlActivated

Согласно источникам API API 21, colorControlNormals с материальным дизайном, похоже, используют colorControlActivatedи colorControlHighlight. Поэтому я попытался переопределить эти свойства в предыдущем определении стиля, но это не имеет никакого эффекта. Вероятно, appcompat не использует его. К сожалению, я не могу найти источники для последней версии appcompat с материальным дизайном.

java,android,android-layout,android-edittext,android-styles,

277

Ответов: 23


461 принят

Наконец, я нашел решение. Она просто состоит из перекрывая значение colorControlNormal, и в вашем определении приложения темы и не ваш стиль EditText. Затем подумайте использовать эту тему для любой деятельности, которую вы желаете. Ниже приведен пример:<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorControlNormal">#c5c5c5</item> <item name="colorControlActivated">@color/accent</item> <item name="colorControlHighlight">@color/accent</item> </style>editText.getBackground().mutate().setColorFilter(getResources().getColor(R.color.your_color), PorterDuff.Mode.SRC_ATOP);

EditText

Я чувствовал, что это требует ответа, если кто-то захочет изменить только один редактор. Я делаю это так:

Toolbar

134

В то время как решение Laurents правильно, он приходит с некоторыми недостатками , как описано в комментариях , так как не только в нижней строке EditTextполучает тонированные , но Бэк Баттона из CheckBoxes, и v22.1т.д. , а также.

К счастью , appcompat-v7из EditTextввел некоторые новые возможности. Теперь можно назначить конкретную тему только одному виду. Прямо из списка :

Устаревшее использование приложения: тема для стилизации панели инструментов. Теперь вы можете использовать Android: темы для панелей инструментов на всех уровнях API 7 и выше устройств и Android: темы поддержки для всех виджетов на уровне 11 API и выше устройств.

Поэтому вместо того, чтобы задавать желаемый цвет в глобальной теме, мы создаем новую и назначаем ее только для 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>

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/MyEditTextTheme"/>

89

Для справки. Это можно изменить в xml, используя:

android:backgroundTint="@color/blue"

44

Вот решение для API <21 и выше

Drawable drawable = yourEditText.getBackground(); // get current EditText drawable 
drawable.setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP); // change the drawable color

if(Build.VERSION.SDK_INT > 16) {
    yourEditText.setBackground(drawable); // set the new drawable to EditText
}else{
    yourEditText.setBackgroundDrawable(drawable); // use setBackgroundDrawable because setBackground required API 16
}

введите описание изображения здесь

Надеюсь, что это поможет

Java, Android, андроид-макет, Android-EditText, андроид-стили,