Изменение EditText нижней строке цвета с AppCompat v7

? Laurent @ | Original: StackOverFlow

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

Я попытался определить пользовательские android:editTextStyle (см ниже ), но я только сумел изменить полное цвет фона или цвет текста, но не в нижней строке, ни цветовой акцент . Естьконкретное значение свойство использовать? я должен использовать пользовательские холст изображение через 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>

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



Top 5 Respuesta

1Peter @

Один быстрое решение для вашей проблемы, чтобы посмотреть в yourappspackage / создания / промежуточные / взорвался, AAR / com.android.support / AppCompat - v7 / RES / холст / для abc_edit_text_material.xml и скопировать этот XML файл в растяжимой папке. Затем вы можете изменить цвет патчами 9 изнутри этого селектора, для того, чтобы соответствовать вашим предпочтениям.



2Laurent @

Наконец, я нашел решение . Это просто состоит из переопределения значения для параметра colorControlActivated, colorControlHighlight и 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>
3TanmayP @

Принимаем ответнемного больше за стиль основе вещь, нонаиболее эффективным, что нужно сделать, это добавить атрибут colorAccent в AppTheme стиле, как это :

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:editTextStyle">@style/EditTextStyle</item>
</style>

<style name="EditTextStyle" parent="Widget.AppCompat.EditText"/>

Атрибут colorAccent используется для виджетов тонировки по всему приложению и, следовательно, должны быть использованы для обеспечения согласованности

4hordurh @

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

editText.getBackground().setColorFilter(getResources().getColor(R.color.your_color), PorterDuff.Mode.SRC_ATOP);