Hallo zusammen,
Ich habe 2 Fragen zu einer ListView in Android:
Wie kann ich bekommen die Farbe der fokussierten Zeile des Listview? Ich habe versucht, die ListView.getSelector () -Methode zu verwenden, die mir laut Dokumentation das geben soll, wonach ich suche, aber es gibt mir ein Drawable-Objekt, von dem ich nicht weiß, wie ich die Farbe abrufen kann (wenn möglich). ..).
Wie kann ich einstellen , die Farbe der Listenansicht der fokussierten Reihe? Hier habe ich versucht, die setSelector () -Methode für die Listenansicht zu verwenden und ihr ein ColorDrawable-Objekt zu übergeben. Das Ergebnis ist jedoch, dass der gesamte Hintergrund der Listenansicht in dieser Farbe gezeichnet ist ... und dies ist nicht das, was ich wollte natürlich...
Vielen Dank!
quelle
Antworten:
Der Listenwähler, der gezeichnet werden kann, ist ein
StateListDrawable
- er enthält Verweise auf mehrere Ziehbare für jeden Status, in dem die Liste ausgewählt, fokussiert, gedrückt, deaktiviert werden kann ...Während Sie das Zeichenobjekt mit abrufen können
getSelector()
, glaube ich nicht, dass Sie ein bestimmtesDrawable
von einem abrufen könnenStateListDrawable
, und es scheint auch nicht möglich zu sein, die Farbe programmgesteuert direkt von einem abzurufenColorDrawable
.Zum Einstellen der Farbe benötigen Sie eine
StateListDrawable
wie oben beschrieben. Sie können dies in Ihrer Liste mithilfe desandroid:listSelector
Attributs festlegen und das Zeichen in XML wie folgt definieren:<?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>
quelle
HINZUFÜGEN: Die Antwort von @ Christopher funktioniert nicht mit API 7/8 (gemäß @ Jonnys korrektem Kommentar), WENN Sie Farben anstelle von Zeichen verwenden. (In meinen Tests funktioniert die Verwendung von Drawables gemäß Christopher einwandfrei.)
Hier ist das FIX für 2.3 und darunter bei Verwendung von Farben:
Laut @Charles Harley gibt es in 2.3 und darunter einen Fehler, bei dem das Füllen des Listenelements mit einer Farbe dazu führt, dass die Farbe über die gesamte Liste fließt. Seine Lösung besteht darin, ein
shape
Zeichenelement zu definieren, das die gewünschte Farbe enthält, und dieses anstelle der Farbe zu verwenden.Ich schlage vor, auf diesen Link zu schauen, wenn Sie nur eine Farbe als Auswahl verwenden möchten und auf Android 2 abzielen (oder zumindest Android 2 zulassen).
quelle