Ändern EditText dem Strich Farbe mit AppCompat v7

? Laurent @ | Original: StackOverFlow

Ich bin mit AppCompat v7, um das Aussehen konsequent auf Android 5 und weniger. Es funktioniert ziemlich gut . Aber ich kann nicht herausfinden, wie die untere Linie die Farbe und die Akzentfarbe für EditTexts ändern. Ist es möglich?

Ich habe versucht, eine benutzerdefinierte android:editTextStyle (siehe unten) zu definieren, aber es gelang mir nur um die volle Hintergrundfarbe oder die Textfarbe, aber nicht unter dem Strich noch die Akzentfarbe zu ändern. Gibt es eine spezielle Eigenschaftswert zu benutzen? muss ich ein benutzerdefiniertes ziehbare Bild durch die android:background Eigenschaft zu verwenden ? ist es nicht möglich, eine Farbe in hexa angeben ?

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

Nach android API 21 Quellen, EditTexts mit Material-Design scheint zu bedienen colorControlActivated und colorControlNormal . Deshalb habe ich versucht, diese Eigenschaften in der vorstehenden Formatdefinition überschreiben, aber es hat keine Wirkung . Wahrscheinlich appcompat nicht verwenden. Leider kann ich die Quellen für die letzte Version von appcompat mit Material-Design nicht zu finden.



Top 5 Antwort

1Peter @

Eine schnelle Lösung für Ihr Problem ist es, in yourappspackage aussehen / build / Zwischenprodukte / explodierte - aar / com.android.support / appcompat - v7 / res / drawable / für abc_edit_text_material.xml und kopieren Sie die XML-Datei in Ihrem Ordner ziehbar . Dann können Sie die Farbe der 9 Patch-Dateien von innerhalb dieser Wahl ändern, um an Ihre Vorlieben anpassen .

2Laurent @

Schließlich habe ich die Lösung gefunden . Es besteht einfach aus überschreiben Sie den Wert für colorControlActivated, colorControlHighlight und colorControlNormal in Ihrer Anwendung Themendefinitionund nicht Ihre EditText Stil. Dann denke, dieses Thema für was auch immer Sie wünschen Aktivität zu verwenden. Hier ein Beispiel :

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

Die akzeptierte Antwort ist ein wenig mehr pro Stil Grundlage Sache, aber die effizienteste, was zu tun ist, um die colorAccent Attribut in Ihrem AppTheme Stil hinzufügen:

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

Die colorAccent Attribut wird für Widget Tönung der ganzen App verwendet und sind daher für die Konsistenz verwendet werden

4hordurh @

Ich fühlte mich wie dies benötigt eine Antwort falls jemand nur eine einzelne EditText ändern wollte . Ich mache es wie folgt aus:

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