Android - ExectableListView -Hintergrund für untergeordnete Elemente ändern
-
19-09-2019 - |
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?
Lösung
Brunnen. Hier ist, was für mich funktioniert hat:
- Erstellen Sie list_background.xml in Ihrem Projekt Ihres Projekts
res/drawable
Verzeichnis - 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);
}