Frage

Ich benutze ExpandableListView In meiner App und einer der Beschwerden, die ich von den Benutzern bekomme, ist das, wenn die List Der Artikel wird erweitert. Es ist schwer zu unterscheiden, wo das Kinderartikel endet und der nächste Gruppenartikel beginnt.

Also möchte ich den Hintergrund des Kindes ändern List Gegenstand zum unterschiedlichen Farbton.

Die brutalen Versuche, die ich bisher unternommen habe View Artikel, aber das führt zu Verlust von Schwebe und Höhepunkten. Meine Frage ist also - was ist eine gute Strategie, um das oben genannte zu erreichen?

Ich habe es versucht styles und selectors Aber was mich wirklich veranlasst, ist, wenn ich den Hintergrund für Kinderartikel ändere, dann muss ich hinzufügen selectors Für alle Kombinationen von Fokus/Aktiviert usw., wenn ich nur versuche, es zu überschreiben, um etwas zu überschreiben.

Gibt es eine Möglichkeit, Eltern zu erben? style und set background Nur für nicht fokussierte, fähige Kinderartikel mit anderen styles zurückgehalten?

War es hilfreich?

Lösung

Brunnen. Hier ist, was für mich funktioniert hat:

  1. Erstellen Sie list_background.xml in Ihrem Projekt Ihres Projekts res/drawable Verzeichnis
  2. Setzen Sie den Hintergrundwert des obersten Layouts Ihres untergeordneten Elements auf den oben genannten Zeichnen. Wenn Sie an diesem Punkt am Kopf kratzen, beziehe ich mich auf die XML -Layout -Datei, die verwendet wird, wenn Sie untergeordnete Ansicht Ihrer erweiterbaren Liste in erstellen ExpandableListAdapter#getChildView

Hier ist die vollständige Zeichnungsdatei

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:state_enabled="true"
        android:drawable="@drawable/list_highlight_active" />
    <item android:state_enabled="true" android:state_selected="true" 
        android:state_window_focused="true"
    android:drawable="@drawable/list_highlight_inactive" />
    <item android:state_enabled="true" android:state_window_focused="true" 
        android:drawable="@color/item_body" />
    <item android:drawable="@color/item_body" />
</selector>

Ich musste kopieren list_highlight_active.xml und list_highlight_inactive.xml aus /android-sdk-windows-1.6_r1/platforms/android-1.5/data/res/drawable zum zeichnbaren Verzeichnis meines Projekts. @color/item_body ist nur ein Graufarbton

Andere Tipps

Ich habe gerade einen Weg gefunden, die Hintergrundfarbe "etwas" festzulegen, ohne durch die Selektor -Reifen springen zu müssen.

Wie Sie erwähnt haben, wird der Hintergrund auf eine feste Farbdarstellung die Highlights ausgewischt, da die neue Hintergrundfarbe ihn verdeckt. Droidin hat die normale Lösung: Geben Sie Ihren eigenen Hintergrundwähler mit den gewünschten Farben an. Es ist gelinde gesagt ein Schmerz, es zu sagen.

Aber wenn Sie nur eine kleine Farbdifferenzierung wollen, dann gibt es einen einfacheren Weg: Alpha -Mischung. Stellen Sie Ihre Hintergrundfarbe mit einem Alpha -Wert ein. Stellen Sie beispielsweise den Hintergrund auf "#bbffffffff" fest. Die ersten beiden Ziffern geben den Alpha -Level an. Es wird alles mischen, so dass der Hintergrund kein reines Weiß ist und das Auswahl -Highlight nicht das normale helle Orange ist, aber die Kinder sind eine andere Farbe und das Highlight funktioniert immer noch. Win-Win-Situation.

Ich suche nach ähnlicher Lösung. Sie können versuchen, übergeordnete Ansicht zur Adaptermethode GetChieldView zu erhalten. Ich denke, dieser Elternteil ist eine übergeordnete Sicht auf alle Chields. Und setzen Sie den Hintergrund von Ressourcen zu diesem übergeordneten. Ich mache es so:

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,  View convertView, ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.fa_report_sub_item, null);
        View parentGroup=(View) convertView.getParent();
        parentGroup.setBackgroundResource(R.drawable.fa_summ_report_main_item);
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top