web-dev-qa-db-fra.com

Arrière-plan du sélecteur par défaut dans les vues cliquables

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

47
Matroska

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

20
Alex Curran

Cela fonctionne pour moi: 

Android:background="?android:attr/selectableItemBackground"
152
Bogdan Balan

Si vous utilisez appcompat-v7, vous pouvez simplement utiliser ?attr/selectableItemBackground.

11
idunnololz

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.

8
flx

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>
5
Aleksejs Mjaliks

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.

  1. 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>
    
  2. 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> 
    
  3. 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"
    
4

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.

4
Colin

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.

0
Morteza Rastgoo