Cambiare EditText linea di fondo di colore con appcompat v7

? Laurent @ | Original: StackOverFlow

Sto usando appcompat v7 per ottenere l' aspetto coerente su Android 5 e meno . Funziona piuttosto bene . Tuttavia non riesco a capire come cambiare il colore della linea di fondo e il colore accento per EditTexts . È possibile?

Ho cercato di definire un custom android:editTextStyle ( vedi sotto ), ma è riuscito solo a cambiare il colore di sfondo pieno o il colore del testo, ma non la linea di fondo, né il colore accento. C'è un valore di proprietà specifica da usare? devo utilizzare un'immagine disegnabile personalizzata attraverso il android:background proprietà ? non è forse possibile specificare un colore in 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>

Secondo android API 21 fonti, EditTexts con disegno materiale sembrano utilizzare colorControlActivated e colorControlNormal . Pertanto, ho cercato di ignorare queste proprietà nella definizione di stile precedente, ma non ha alcun effetto . Probabilmente appcompat non lo usa . Purtroppo, non riesco a trovare le fonti per l' ultima versione di appcompat con design dei materiali .



Top 5 Respuesta

1Peter @

Una soluzione rapida per il vostro problema è quello di guardare in yourappspackage / costruire / intermedie / esplosa - AAR / com.android.support / / appcompat -V7 res / drawable / per abc_edit_text_material.xml e copiare il file xml nella cartella drawable . Quindi è possibile modificare il colore dei file di patch 9 da dentro questo selettore, al fine di soddisfare le vostre esigenze .



2Laurent @

Infine, ho trovato la soluzione . Consiste semplicemente di rilevante valore per colorControlActivated, colorControlHighlight e colorControlNormal nella definizione app tema e non è il tuo stile EditText . Quindi, pensare di utilizzare questo tema per qualsiasi attività che si desidera . Di seguito è riportato un esempio :

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

La risposta accettata è un po 'più per stile base cosa, ma la cosa più efficace da fare è aggiungere l'attributo colorAccent nel vostro stile AppTheme in questo modo :

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

L'attributo colorAccent è utilizzato per la colorazione del widget di tutta l'applicazione e quindi dovrebbe essere usato per coerenza

4hordurh @

Mi sentivo come questo aveva bisogno di una risposta in caso qualcuno volesse cambiare un solo EditText . Lo faccio in questo modo:

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