Mudando EditText linha de fundo cor com AppCompat v7

? Laurent @ | Original: StackOverFlow
---

Eu estou usando AppCompat v7 para obter a aparência consistente sobre Android 5 e menos . Ele funciona muito bem. No entanto, eu não consigo descobrir como mudar a cor da linha de fundo e a cor de destaque para EditTexts . É possível?

Tentei definir uma custom android:editTextStyle (cf. abaixo ), mas eu só conseguiu mudar a cor cheia ou cor de fundo do texto, mas não a linha de fundo, nem a cor de destaque . Existe um valor de propriedade específica de usar? que eu tenho que usar uma imagem personalizada drawable através do android:background propriedade? não é possível especificar uma cor em hexa ?

 <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>

De acordo com a API android 21 fontes, EditTexts com material de desenho parecem usar colorControlActivated e colorControlNormal . Portanto, eu tentei substituir essas propriedades na definição de estilo anterior, mas não tem nenhum efeito . Provavelmente AppCompat não usá-lo. Infelizmente, eu não consigo encontrar as fontes para a última versão do AppCompat com design material.

---

Top 5 Responder

1Peter @

Uma solução rápida para o seu problema é olhar em yourappspackage / construção / intermediários / explodiu - AAR / com.android.support / / AppCompat - v7 res / drawable / para abc_edit_text_material.xml e copie esse arquivo xml na pasta drawable . Em seguida, você pode mudar a cor dos arquivos de patch 9 de dentro este selector, de modo a corresponder às suas preferências .

2Laurent @

Finalmente, eu encontrei a solução. Ela simplesmente consiste em substituir o valor para colorControlActivated, colorControlHighlight e colorControlNormal em sua definição de tema app e não o seu estilo EditarTexto . Então, acho que para usar este tema para qualquer atividade que você deseja. Abaixo está um exemplo :

<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 @

A resposta aceita é um pouco mais por coisa base estilo, mas a coisa mais eficiente de fazer é adicionar o atributo colorAccent em seu estilo AppTheme como este:

<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"/>

O atributo colorAccent é usado para tingimento de ferramenta ao longo do app e, portanto, devem ser usados ​​para a consistência

4hordurh @

Eu me senti como este precisava de uma resposta no caso de alguém queria mudar apenas um único EditarTexto . Eu faço-o assim:

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