Wenn Sie in einer forensischen Stimmung sind, erfahren Sie hier, wie Sie graben und herausfinden, was los ist.
android:background="?android:attr/activatedBackgroundIndicator"?
Intuitiv bedeutet dies, den Hintergrund auf ein Zeichen zu setzen.
Aber lassen Sie uns dies weiter zerlegen, um zu sehen, wie wir zu unserem mysteriösen Zeichen gelangen.
Um genau zu sein, bedeutet dies "Setzen Sie das Hintergrundattribut auf das, worauf sich das Attribut" enabledBackgroundIndicator " im aktuellen Thema bezieht .
Wenn Sie den Teil "bezieht sich auf das aktuelle Thema" verstehen, haben Sie im Grunde alles verstanden, was sich hinter den Deckblättern abspielt.
Grundsätzlich ist enabledBackgroundIndicator kein tatsächliches Drawable, sondern ein Verweis auf ein Drawable . Wo also ist das Attribut "activBackgroundIndictor" tatsächlich definiert?
Es ist in Ihrem SDK-Verzeichnis in einem Dateinamen attrs.xml definiert . Beispielsweise:
path_to_android_sdk / platform / android-17 / data / res / values / attrs.xml
Wenn Sie diese Datei öffnen, erhalten Sie die Erklärung wie folgt:
<attr name="activatedBackgroundIndicator" format="reference" />
In attrs.xml deklarieren Sie alle Attribute, die Sie später in Ihrer View-XML verwenden werden. Beachten Sie, dass wir das Attribut und seinen Typ deklarieren und hier keinen Wert zuweisen .
Der tatsächliche Wert wird in der Datei theme.xml zugewiesen . Diese Datei befindet sich unter:
path_to_android_sdk / platform / android-17 / data / res / values / theme.xml
Wenn Sie diese Datei öffnen, werden die verschiedenen Definitionen angezeigt, je nachdem, welches Thema Sie verwenden . Hier sind beispielsweise die Definitionen für die Themennamen Theme, Theme.Light, Theme.Holo, Theme.Holo.Light:
<item name="activatedBackgroundIndicator">@android:drawable/activated_background</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_light</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_holo_dark</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_holo_light</item>
Jetzt haben wir unsere mysteriösen Drawables. Wenn Sie den ersten auswählen, wird dieser im Zeichenordner unter folgender Adresse definiert:
path_to_android_sdk / platform / android-17 / data / res / drawable / enabled_background.xml
Wenn Sie diese Datei öffnen, sehen Sie die Definition des Zeichens, die wichtig ist, um zu verstehen, was vor sich geht.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@android:drawable/list_selector_background_selected" />
<item android:drawable="@color/transparent" />
</selector>
Hier definieren wir ein Drawable mit zwei Status - der Standardstatus ist nur ein transparenter Hintergrund, und wenn der Status "state_activated" ist, lautet unser Drawable "list_selector_background_selected".
Unter diesem Link finden Sie Hintergrundinformationen zu Zeichen und Zuständen.
"list_selector_background_selected" ist eine 9-Patch-PNG-Datei, die sich im Ordner drawable-hdpi befindet.
Jetzt können Sie sehen, warum wir activatedBackgroundIndicator als Referenz definiert haben, anstatt direkt mit der Zeichnungsdatei zu verknüpfen. So können Sie je nach Thema die richtige Zeichnungsdatei auswählen.