J'ai des vues cliquables et je veux définir l'arrière-plan disponible par défaut qui est présent lors du clic sur la liste (dans ICS, la couleur bleue) J'ai essayé de mettre en arrière-plan ceci:
Android:background="@Android:drawable/list_selector_background"
mais ce n'est pas le bleu par défaut que j'ai par défaut (celui que j'ai utilisé est orange). Quel est le dessin utilisable par défaut sur Android comme sélecteur de clic?
Merci
C'est list_selector_holo_dark
ou la version équivalente holo light; et ce sont les valeurs par défaut dans Honeycomb et au-dessus. list_selector_background
est la version non-holo, utilisée dans Gingerbread et au-dessous.
MODIFIER: I croire (mais ne peut pas confirmer) que le sélecteur indépendant de la plate-forme est ?android:attr/listSelector
Cela fonctionne pour moi:
Android:background="?android:attr/selectableItemBackground"
Si vous utilisez appcompat-v7
, vous pouvez simplement utiliser ?attr/selectableItemBackground
.
Il existe un moyen de combiner toutes les réponses valides:
Définissez un attribut (par exemple, dans values / attrs.xml):
<attr name="clickableItemBackground" format="reference"/>
Dans la section de thème dépendante de votre plate-forme (par exemple, dans values / styles.xml ou values / themes.xml), déclarez ceci:
<style name="Theme.Platform" parent="@Android:style/Theme.Whatever">
<item name="clickableItemBackground">@Android:drawable/list_selector_background</item>
</style>
Dans la section thème dépendante de votre plate-forme pour api-11 + (par exemple, dans values-v11/styles.xml ou values-v11/themes.xml), déclarez ceci:
<style name="Theme.Platform" parent="@Android:style/Theme.Holo.Whatever">
<item name="clickableItemBackground">?android:attr/selectableItemBackground</item>
</style>
Ensuite, utilisez ?attr/clickableItemBackground
si nécessaire.
Une solution similaire à la réponse de flx, mais sans définition d'attribut supplémentaire.
Style indépendant de la plate-forme utilisé pour les appareils antérieurs à Holo (en res\values\styles.xml
):
<style name="SelectableItem">
<item name="Android:background">@Android:drawable/list_selector_background</item>
</style>
Style pour les périphériques Holo (API niveau 14+) (en res\values-v14\styles.xml
):
<style name="SelectableItem">
<item name="Android:background">?android:attr/selectableItemBackground</item>
</style>
Appliquer le style à la vue requise, par exemple, LinearLayout
:
<LinearLayout
style="@style/SelectableItem"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
...
</LinearLayout>
Cela fonctionne bien sur api 11 et ci-dessus. Mais comme indiqué, cela ne fonctionnera pas avec les versions précédentes.
Android:background="?android:attr/selectableItemBackground"
Voici une solution pour le faire fonctionner sur toutes les versions sous Android.
Ajoutez les couleurs appropriées dans le fichier colors.xml situé dans votre dossier de valeurs. Il devrait apparaître comme tel:
<color name="white">#ffffff</color>
<color name="blue">#7ecce8</color>
Créez un fichier de sélecteur XML. Ici je l’ai nommée button_selection.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true" Android:drawable="@color/blue"/> <!--pressed -->
<item Android:state_focused="true" Android:drawable="@color/blue"/> <!-- focused -->
<item Android:drawable="@color/white"/> <!-- default -->
</selector>
Accédez à votre vue ou à votre bouton et définissez le nouveau fichier button_selection.xml comme arrière-plan.
Android:background="@drawable/button_selection"
Alternativement
Android:background="?android:attr/listChoiceBackgroundIndicator
si vous souhaitez simplement que les éléments soient surlignés en bleu (ou quelle que soit la valeur par défaut actuelle) lors du clic.
La définition de Background
vous empêche de choisir une couleur d'arrière-plan ou de dessiner plus tard! Mon conseil est donc d'ajouter ce style à votre styles.xml
:
<style name="TouchableView">
<item name="Android:foreground">?android:attr/selectableItemBackground</item>
</style>
Et puis sur chaque vue il suffit d'ajouter:
Android:theme="@style/TouchableView"
CommeANYVIEW!
<TextView
Android:id="@+id/my_orders"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginRight="0dp"
Android:theme="@style/TouchableView"
Android:background="@color/white"
Android:gravity="left"
Android:padding="10dp"
Android:text="@string/my_orders"
Android:textColor="@color/gray"
Android:textSize="14sp" />
N'oubliez pas d'ajouter onClickListener
pour voir les résultats.