web-dev-qa-db-fra.com

sélecteur de bouton Android

Il s'agit d'un sélecteur de bouton tel que, lorsqu'il est normal, il apparaît en rouge, il est gris lorsqu'il est enfoncé.

Je voudrais demander comment le code pourrait-il être modifié directement de manière à ce que, une fois pressé, la taille et la couleur du texte puissent également changer? Merci beaucoup!

<item Android:state_pressed="true" >         
    <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"> 
        <stroke Android:width="2dp" Android:color="@color/black" />
        <solid Android:color="@color/grey"/>
        <padding Android:left="5dp" Android:top="2dp" 
            Android:right="5dp" Android:bottom="2dp" /> 
        <corners Android:radius="5dp" /> 
    </shape>    
</item>

<item>
    <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"> 
        <stroke Android:width="2dp" Android:color="@color/black" />
        <solid Android:color="#FF6699"/>
        <padding Android:left="5dp" Android:top="2dp" 
            Android:right="5dp" Android:bottom="2dp" /> 
        <corners Android:radius="5dp" /> 
    </shape>
</item>

97
pearmak

Il vous suffit de définir selector of button dans votre fichier de présentation.

<Button
     Android:id="@+id/button1"
     Android:background="@drawable/selector_xml_name"
     Android:layout_width="200dp"
     Android:layout_height="126dp"
     Android:text="Hello" />

et fait.

Modifier

Voici le fichier button_effect.xml dans le répertoire drawable

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <item Android:drawable="@drawable/numpad_button_bg_selected" Android:state_selected="true"></item>
    <item Android:drawable="@drawable/numpad_button_bg_pressed" Android:state_pressed="true"></item>
    <item Android:drawable="@drawable/numpad_button_bg_normal"></item>

</selector>

En cela, vous pouvez voir qu'il y a 3 tirables, il vous suffit de placer ce style button_effect dans votre button, comme je l'ai écrit ci-dessus. Il vous suffit de remplacer selector_xml_name par button_effect.

196
Chintan Rathod

Vous ne pouvez pas changer la taille du texte avec une liste d’états dessinable . Pour changer la couleur et la taille du texte, procédez comme suit:

Couleur du texte

Pour changer la couleur du texte, vous pouvez créer la liste d'état de couleur ressource . Ce sera une ressource séparée située dans le répertoire res/color/. Dans layout xml, vous devez le définir comme valeur pour l'attribut Android:textColor. Le sélecteur de couleur contiendra alors quelque chose comme ceci:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_pressed="true" Android:color="@color/text_pressed" />
    <item Android:color="@color/text_normal" />
</selector>

Taille du texte

Vous ne pouvez pas changer la taille du texte simplement avec des ressources. Il n'y a pas de "sélecteur de dimen". Vous devez le faire dans le code. Et il n'y a pas de solution simple. 

La solution la plus simple consiste probablement à utiliser View.onTouchListener() et à gérer les événements ascendants et descendants en conséquence. Utilisez quelque chose comme ceci:

view.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // change text size to the "pressed value"
                return true;
            case MotionEvent.ACTION_UP:
                // change text size to the "normal value"
                return true;
            default:
                return false;
            }
        }
});

Une solution différente pourrait être d'étendre la vue et de remplacer la méthode setPressed(Boolean). La méthode est appelée en interne lorsque le changement d'état pressé a lieu. Puis changez la taille du texte en conséquence dans l'appel de méthode (n'oubliez pas d'appeler le super).

21
Tomik

Créer custom_selector.xml dans un dossier pouvant être dessiné 

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
   <item Android:drawable="@drawable/unselected" Android:state_pressed="true" />
   <item Android:drawable="@drawable/selected" />
</selector>

Créer une forme selected.xml dans un dossier pouvant être dessiné

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle" Android:padding="90dp">
   <solid Android:color="@color/selected"/>
   <padding />
   <stroke Android:color="#000" Android:width="1dp"/>
   <corners Android:bottomRightRadius="15dp" Android:bottomLeftRadius="15dp" Android:topLeftRadius="15dp" Android:topRightRadius="15dp"/>
</shape>

Créer une forme non sélectionnée.xml dans un dossier pouvant être dessiné

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle" Android:padding="90dp">
   <solid Android:color="@color/unselected"/>
   <padding />
   <stroke Android:color="#000" Android:width="1dp"/>
   <corners Android:bottomRightRadius="15dp" Android:bottomLeftRadius="15dp" Android:topLeftRadius="15dp" Android:topRightRadius="15dp"/>
</shape>

Ajouter les couleurs suivantes pour l'état sélectionné/non sélectionné dans le dossier color.xml du dossier de valeurs 

<color name="selected">#a8cf45</color>
<color name="unselected">#ff8cae3b</color>

vous pouvez vérifier la solution complète de ici

11
nirav kalola

Le meilleur moyen d'implémenter le sélecteur est d'utiliser le XML au lieu d'utiliser la méthode de programmation comme plus facile à implémenter avec XML.

    <?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
        <item Android:drawable="@drawable/button_bg_selected" Android:state_selected="true"></item>
        <item Android:drawable="@drawable/button_bg_pressed" Android:state_pressed="true"></item>
        <item Android:drawable="@drawable/button_bg_normal"></item>

    </selector>

Pour plus d'informations, j'ai utilisé ce lien http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html

2
Bhushan Shirsath

Dans le fichier Layout .xml

<Button
 Android:id="@+id/button1"
 Android:background="@drawable/btn_selector"
 Android:layout_width="100dp"
 Android:layout_height="50dp"
 Android:text="press" />

btn_selector.xml

<?xml version="1.0" encoding="utf-8"?>

 <item Android:drawable="@drawable/btn_bg_selected" Android:state_selected="true"></item>
<item Android:drawable="@drawable/btn_bg_pressed" Android:state_pressed="true"></item>
<item Android:drawable="@drawable/btn_bg_normal"></item>

1
Vishal G. Gohel

Vous pouvez utiliser ce code:

<Button
Android:id="@+id/img_sublist_carat"
Android:layout_width="70dp"
Android:layout_height="68dp"
Android:layout_centerVertical="true"
Android:layout_marginLeft="625dp"
Android:contentDescription=""
Android:background="@drawable/img_sublist_carat_selector"
Android:visibility="visible" />

(Fichier de sélecteur) Img_sublist_carat_selector.xml:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
 <item Android:state_focused="true" 
       Android:state_pressed="true"        
       Android:drawable="@drawable/img_sublist_carat_highlight" />
 <item Android:state_pressed="true" 
       Android:drawable="@drawable/img_sublist_carat_highlight" />
 <item Android:drawable="@drawable/img_sublist_carat_normal" />
</selector>
0