2010-06-04 18 views
7

Ich habe die Interwebs durchforstet und viele Beiträge gefunden, wie man die Farben einer Listenansicht mit einem Listenselektor ändert. Aber es scheint nicht für mich zu funktionieren. Meine Frage wäre also, was mache ich falsch?Android ListView Farben anpassen?

Wenn ich die folgenden Dateien verwende, erhalte ich eine Liste, in der alle Artikelhintergründe anfänglich blau sind. (Ich erwartete Weiß)

Wenn ich den Fokus nach oben und unten verschiebe, ändert sich der Text nur zu einem dunklen Grau und die Artikelhintergründe sind immer noch blau. (Dies ist, wenn ich eine einzige Zeile blau mit dem Rest weiß erwarten würde)

Wenn ich auf eine Zeile klicke, wird der Hintergrund der Zeile, die ich anklickte, schwarz und alle anderen Zeilen grün. (Ich erwartet, dass die Zeile drehe ich geklickt haben grün und der Rest weiß sein)

Hier ist meine Haupt Layout-Datei:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<ListView 
    android:id="@android:id/list" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:listSelector="@drawable/item_selector" 
    /> 
<TextView 
    android:id="@android:id/empty" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/empty" 
    /> 
</LinearLayout> 

Hier ist meine Liste Artikeldatei:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:padding="10sp"> 
    <CheckBox 
     android:id="@+id/checkbox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:focusable="false" 
     /> 
    <TextView 
     android:id="@+id/title" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:ellipsize="end" 
     android:singleLine="true" 
     android:textStyle="bold" 
     android:padding="7dip" 
     android:textSize="18sp" 
     android:layout_toRightOf="@id/checkbox" 
     /> 
</RelativeLayout> 

Hier meine Farben ist file:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="red">#ff00</color> 
    <color name="green">#f0f0</color> 
    <color name="blue">#f00f</color> 
    <color name="white">#ffff</color> 
</resources> 

Hier meine Wähler Datei ist:

Hoffentlich ist es etwas dumm und einfach, dass ich falsch mache.

Vielen Dank im Voraus.

+0

Es klingt wie die gesamte ListView selbst konzentriert wird, anstatt der einzelnen Listenelemente. – YGL

Antwort

7

Ich denke, dass android: listSelector = "@ drawable/item_selector" wird nur auf den Stamm der Ansicht überhaupt nicht sein Unterkind angewendet.

Try @ ziehbar/item_selector als backgroud Ihrer RelativeLayout mit android:background="@drawable/item_selector" und legte ein transparentes Layout der listSelector hinzuzufügen:

android:listSelector="@android:color/transparent" 
+0

Das war die gewinnende Kombination. Vielen Dank! Habe jetzt schon ein paar Tage damit zu kämpfen. –

+0

Sehr gut danke :) – ademar111190

1

Eigentlich ist es, wenn Sie tun möchten Sie programmatisch ohne den Einsatz von Ressourcen, kann deine Elementfarbe einstellen.

objTextView.setTextColor(color.parseColor("#F12345")); 

Dies ist praktisch, wenn Sie dynamisch eine Farbe mögen, in einer Listenansicht festlegen, die vom Benutzer wählbaren ist, vielleicht in einer Datenbank gespeichert, wo man einfach kippe Verwendung: Zum Beispiel, Textfarbe # F123456 in einem TextView einstellen eine statische Ressourcendatei für Farblisten.