web-dev-qa-db-fra.com

android - applique selectableItemBackground au format XML avec le support v7

même avec Android support v7 inclus dans mon application

ajouter Android:background="?android:attr/selectableItemBackground"

rend mon IDE, Eclipse jeter une erreur (m'empêchant de compiler), en me notifiant que selectableItemBackground est uniquement pour min Api 11 et plus.

Comment ajouter cet attribut à un arrière-plan XML?

supposer que copier et coller depuis une bibliothèque supérieure n'est pas une solution

68
CQM

Puisque l'attribut est défini dans une bibliothèque (support v7), vous l'utiliseriez comme attribut défini par l'utilisateur: i.e sans le Android: préfixe:

Android:background="?attr/selectableItemBackground"

L'erreur que vous voyez fait remarquer que ?android:attr/selectableItemBackground est disponible pour les versions d'API> = 11. C'est vrai, en effet.

198
Vikram

Voici selectedItemBackground. Vous pouvez le trouver dans /platforms/Android-14/data/res/themes.xml

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android"
          Android:exitFadeDuration="@Android:integer/config_mediumAnimTime">

    <item Android:state_window_focused="false" Android:drawable="@color/transparent" />

    <!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
    <item Android:state_focused="true"  Android:state_enabled="false" Android:state_pressed="true" Android:drawable="@drawable/list_selector_background_disabled" />
    <item Android:state_focused="true"  Android:state_enabled="false"                              Android:drawable="@drawable/list_selector_background_disabled" />
    <item Android:state_focused="true"                                Android:state_pressed="true" Android:drawable="@drawable/list_selector_background_transition" />
    <item Android:state_focused="false"                               Android:state_pressed="true" Android:drawable="@drawable/list_selector_background_transition" />
    <item Android:state_focused="true"                                                             Android:drawable="@drawable/list_selector_background_focused" />
    <item Android:drawable="@color/transparent" />

</selector>

et vous pouvez trouver des éléments dessinables dans votre répertoire Android SDK

../platforms/Android-14/data
15
Sunny

Pas un expert sur le sujet, mais il semble que vous ayez besoin d'une thématisation basée sur la version de la plateforme. Le guide officiel explique assez bien ce processus, je pense.

Vous devez créer différents fichiers XML pour chaque version et les enregistrer dans res/values-v7, res/values-v11 etc. Utilisez ensuite ces styles pour vos vues. Quelque chose comme ça:

dans res/values-v7:

<style name="LightThemeSelector" parent="Android:Theme.Light">
    ...
</style>

dans res/values-v11:

<style name="LightThemeSelector" parent="Android:Theme.Holo.Light">
    <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
    ...
</style>

Ensuite, utilisez le style pour la vue:

<TextView
    style="@style/LightThemeSelector"
    Android:text="@string/hello" />

J'espère que cela t'aides. À votre santé.

4
kraxor