2010-01-10 5 views
71

Hallo zusammen,Android Listview-Selector Farbe

Ich habe 2 Fragen zu einem Listview in Android:

  1. Wie kann ich bekommen die Farbe der fokussierten Zeile des Listview? Ich habe versucht, die ListView.getSelector() Methode zu verwenden, die nach ihrer Dokumentation mir geben sollte, was ich suche, aber es gibt mir ein Drawable-Objekt, von dem ich nicht weiß, wie man die Farbe abruft (wenn möglich...).

  2. Wie kann ich die Farbe der fokussierten Zeile des Listview setzen? Hier habe ich versucht, die setSelector() Methode auf der ListView, übergibt es ein ColorDrawable-Objekt, aber das Ergebnis davon ist, dass der gesamte Hintergrund der Listenansicht in dieser Farbe gemalt wird ... und das ist nicht was ich natürlich wollte ...

Danke!

+0

Das kann helfen (es gibt sowohl eine Frage als auch eine Lösung): http://StackOverflow.com/Questions/2065430/Fixed-android-detecting-Focus-Pressed-Color –

+0

Es scheint, dass es einen Fehler in Android 2, der verursacht die Farbe, die den gesamten Hintergrund beeinflusst - überprüfen Sie meine Antwort, die mit einer Problemumgehung für eine andere Frage verknüpft ist. –

Antwort

88

Die Liste Selektor ziehbar ist ein StateListDrawable — es enthält Verweis auf mehrere Drawables für jeden Zustand kann die Liste, wie zum ausgewählt, fokussiert, gedrückt, deaktiviert ...

Während Sie die ziehbar getSelector() Verwendung abrufen können, Ich glaube nicht, dass Sie eine spezifische Drawable aus einer StateListDrawable abrufen können, noch scheint es möglich, die Farbe direkt von einem ColorDrawable programmatisch abzurufen.

Wie für die Einstellung der Farbe benötigen Sie eine StateListDrawable wie oben beschrieben. Sie können dies auf Ihrer Liste setzen die android:listSelector Attribut, die Definition der ziehbar in XML wie folgt aus:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_enabled="false" android:state_focused="true" 
     android:drawable="@drawable/item_disabled" /> 
    <item android:state_pressed="true" 
     android:drawable="@drawable/item_pressed" /> 
    <item android:state_focused="true" 
     android:drawable="@drawable/item_focused" /> 
</selector> 
+12

Ich würde auch verschieben die Zuweisung der Liste-Selektor zu einem benutzerdefinierten Thema, so würden alle Listen in Ihrer Anwendung gleich aussehen @ zeichnbare/my_list_highlight

+0

Wie kann ich diesen Code für lange drücken Veranstaltung? –

+0

@Alex: kannst du zeigen, wie ich das machen kann? – eugene

11

hinzuzufügen: @Christopher's answer nicht 7/8 (per @ Jonnys richtigen Kommentar) auf API funktioniert, wenn Sie Verwenden von Farben anstelle von Zeichen. (In meinen Tests mit Drawables wie pro Christopher funktioniert gut)

Hier ist die FIX für 2.3 und unter wenn Farben mit:

Per @Charles Harley, Es gibt einen Fehler in 2.3 und darunter, wo das Füllen des Listenelements mit einer Farbe bewirkt, dass die Farbe über die gesamte Liste hinaus fließt. Seine Lösung besteht darin, einen shape Zeichensatz zu definieren, der die gewünschte Farbe enthält, und diesen anstelle der Farbe zu verwenden.

Ich schlage vor, diesen Link zu sehen, wenn Sie nur eine Farbe als Selektor verwenden möchten, und Android 2 zielen (oder zumindest für Android 2 zulassen).

+2

Das hat mich gerade wieder gebissen, danke, dass du mich daran erinnert hast, was das eigentliche Problem ist. –