Si vous êtes d'humeur médico-légale, voici comment creuser et découvrir ce qui se passe.
android:background="?android:attr/activatedBackgroundIndicator"?
Intuitivement, cela signifie définir l'arrière-plan sur certains dessinables.
Mais décomposons cela davantage pour voir comment nous arrivons à notre mystérieux dessinable.
Pour être précis, cela signifie "définir l'attribut background sur ce à quoi l'attribut" enabledBackgroundIndicator " fait référence dans le thème courant .
Si vous comprenez la partie «fait référence dans le thème actuel», vous avez essentiellement compris tout ce qui se passe derrière les couvertures.
Fondamentalement, enabledBackgroundIndicator n'est pas un dessinable réel mais une référence à un dessinable . Alors, où l'attribut "activateBackgroundIndictor" est-il réellement défini?
Il est défini dans votre répertoire sdk dans un nom de fichier attrs.xml . Par exemple:
path_to_android_sdk / plates-formes / android-17 / data / res / values / attrs.xml
Si vous ouvrez ce fichier, vous ferez la déclaration comme suit:
<attr name="activatedBackgroundIndicator" format="reference" />
attrs.xml est l'endroit où vous déclarez tous les attributs que vous allez utiliser plus tard dans votre vue xml. Notez que nous déclarons l'attribut et son type et n'affectons pas réellement de valeur ici .
La valeur réelle est attribuée dans themes.xml . Ce fichier se trouve à:
path_to_android_sdk / plates-formes / android-17 / data / res / values / themes.xml
Si vous ouvrez ce fichier, vous verrez les multiples définitions en fonction du thème que vous utilisez . Par exemple, voici les définitions des noms de thèmes Theme, Theme.Light, Theme.Holo, Theme.Holo.Light respectivement:
<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>
Maintenant, nous avons nos mystérieux drawables. Si vous choisissez le premier, il est défini dans le dossier dessinable à:
path_to_android_sdk / plates-formes / android-17 / data / res / drawable / enabled_background.xml
Si vous ouvrez ce fichier, vous verrez la définition du dessinable, ce qui est important pour comprendre ce qui se passe.
<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>
Ici, nous définissons un dessinable avec deux états - l'état par défaut est juste un arrière-plan transparent et si l'état est "state_activated" alors notre dessinable est "list_selector_background_selected".
voir ce lien pour des informations générales sur les drawables et les états.
"list_selector_background_selected" est un fichier png de 9 patchs qui se trouve dans le dossier drawable-hdpi.
Vous pouvez maintenant voir pourquoi nous avons défini enabledBackgroundIndicator comme référence plutôt que de créer un lien direct vers le fichier dessinable - cela vous permet de choisir le bon dessinable en fonction de votre thème.