2011-01-03 11 views
39

Wie kann ich die Fokusfarbe (orange) in einem EditText-Feld ändern? Die Fokusfarbe ist ein kleiner Rand um das gesamte Steuerelement und ist hell, wenn das Steuerelement den Fokus hat. Wie kann ich die Farbe dieses Fokus auf eine andere Farbe ändern? Kann mir jemand helfen, dieses Problem zu lösen? Vielen Dank im Voraus,So ändern Sie die Fokusfarbe von EditText in Android

Antwort

62

Sie müssen Ihr eigenes NinePatch-Bild erstellen/ändern, um das Standardbild zu ersetzen und dieses als Hintergrund für Ihren EditText zu verwenden. Wenn Sie in Ihrem SDK-Ordner unter Ihrer Plattform res/drawbar suchen, sollten Sie das NinePatch-Bild für den EditText-Fokusstatus finden. Wenn das alles ist, was Sie ändern möchten, können Sie es einfach in Photoshop oder eine andere Bildbearbeitungssoftware ziehen und die orange Farbe in eine Farbe Ihrer Wahl ändern. Dann speichern, dass in Ihren ziehbar Ordner und den Bau einen neuen StateListDrawable, zum Beispiel so etwas wie die folgenden Liste:

edittext_modified_states.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    > 
    <item 
     android:state_pressed="true" 
     android:drawable="@android:drawable/edittext_pressed" 
     /> <!-- pressed -->  
    <item 
     android:state_focused="true" 
     android:drawable="@drawable/edittext_focused_blue" 
     /> <!-- focused -->  
    <item 
     android:drawable="@android:drawable/edittext_normal" 
     /> <!-- default --> 
</selector> 

Ich weiß nicht ohne Weiteres der tatsächlichen Namen für den Standard NinePatches für den EditText, also ersetzen Sie diese bei Bedarf, aber der Schlüssel hier ist, nur die @android:drawable Bilder für die zu verwenden, die Sie nicht geändert haben (oder Sie können sie in den zeichnungsfähigen Ordner Ihres Projekts kopieren), und verwenden Sie dann Ihre modifizierten Zeichen für Dein fokussierter Zustand.

können Sie dann setzen Sie diese StateListDrawable als Hintergrund für Ihre Textview, etwa so:

<TextView 
    android:background="@drawable/edittext_modified_states" 
+0

Auf welcher Android-Version funktioniert diese Lösung? Ich habe versucht, die Farbe in Android 2.1 zu ändern, aber es scheint, dass die Namen und XML-Dateien darin unterschiedlich sind. Ich verstehe die Idee, aber die Frustration wächst, da ich ständig mit Fehlern konfrontiert bin. – zaplec

+0

In 2.1 musste ich auch die normalen unmodifizierten Zustandsbilder in den ziehbaren Ordner der Anwendungen kopieren, um diese Arbeit zu bekommen. So habe ich in meinen applikationsfähigen Drawbaren Ordnern das modifizierte Fokuszustandsbild und auch unmodifizierte Originalzustandsbilder. Jetzt funktioniert es. – zaplec

+0

Es funktioniert möglicherweise nicht, wie ich sagte, Sie müssen sie möglicherweise in Ihren Ordner kopieren (so wie es aussieht); Das war nur eine Lösung von ganz oben. :) – kcoppock

0
<?xml version="1.0" encoding="utf-8"?> 
<selector 
xmlns:android="http://schemas.android.com/apk/res/android" 
> 
    <item 
     android:state_pressed="true" 
     android:color="colorcode" 
    /> <!-- pressed -->  
    <item 
     android:state_focused="true" 
     android:color="colorcode" 
    /> <!-- focused -->  
    <item 
      android:color="colorcode" 
    /> <!-- default --> 
</selector> 
+1

Dieser Code funktioniert nicht und zeigt mir diesen Fehler "02-07 03: 45: 01.131: E/AndroidRuntime (2911): Verursacht von: org.xmlpull.v1.XmlPullParserException: Binär XML-Dateizeile # 8: Tag erfordert ein "Zeichen" -Attribut oder Kind-Tag, das ein Zeichen definiert " – andrewww

+0

try' 'anstelle von' android: color' – sent1nel

+0

@andrewww create color.xml in ' res/color' Ordner und versuche 'android: color =" @ color/colorname "' –

0

Sie brauchen nicht xml Drawables zu erstellen. Es kann einfacher im Code sein. Beispiel in kotlin:

editText.onFocusChangeListener = OnFocusChangeListener { _, hasFocus -> 
    // colorLine, colorLineFocus is vars of ColorStateList 
    ViewCompat.setBackgroundTintList(editText, if (hasFocus) colorLineFocus else colorLine) 
} 
Verwandte Themen