128 votes

Sélecteur de boutons Android

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

Je voudrais demander comment le code pourrait être modifié directement de manière à ce que, lorsqu'on appuie sur la touche, 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>

232voto

Chintan Rathod Points 7938

Il vous suffit de définir selector de button dans votre fichier de mise en page.

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

et terminé.

Modifier

Ce qui suit est button_effect.xml dans drawable répertoire

<?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>

Dans cette image, vous pouvez voir qu'il y a 3 objets à dessiner, vous avez juste besoin de placer ceci button_effect style à votre button comme je l'ai écrit plus haut. Vous devez juste remplacer selector_xml_name avec button_effect .

31voto

Tomik Points 10422

Il n'est pas possible de modifier la taille du texte à l'aide d'un fichier liste d'état traçable . Pour modifier la couleur et la taille du texte, procédez comme suit :

Couleur du texte

Pour modifier la couleur du texte, vous pouvez créer ressource de la liste des états de couleur . Il s'agira d'une ressource distincte située dans res/color/ répertoire. Dans le layout xml vous devez le définir comme la valeur pour android:textColor attribut. 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 modifier la taille du texte simplement avec des ressources. Il n'y a pas de "sélecteur de taille". Vous devez le faire en code. Et il n'existe pas de solution simple.

La solution la plus simple consiste probablement à utiliser View.onTouchListener() et traiter les événements de montée et de descente 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 consister à étendre la vue et à remplacer la fonction setPressed(Boolean) méthode. La méthode est appelée en interne lorsque le changement d'état de l'appui se produit. Changez ensuite la taille du texte en conséquence dans l'appel de la méthode (n'oubliez pas d'appeler le super).

18voto

nirav kalola Points 56

Créez le fichier custom_selector.xml dans le dossier drawable.

<?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 la forme selected.xml dans le dossier drawable

<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 unselected.xml dans le dossier drawable

<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 color.xml du dossier values

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

vous pouvez consulter la solution complète sur aquí

2voto

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 Selector) 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>

2voto

Bhushan Points 67

La meilleure façon de mettre en œuvre le sélecteur est d'utiliser le xml au lieu d'utiliser la méthode programmatique, car il est plus facile à mettre en œuvre avec le 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X