web-dev-qa-db-fra.com

Android bouton sélectionner et appuyer sur drawable

J'essaie de faire un bouton avec l'état appuyez et sélectionnez, j'ai déjà fait la même chose avec les onglets et cela fonctionne mais je ne sais pas pourquoi ici ne fonctionne pas. Je l'ai fait comme ça:

button_sel.xml

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" 
       Android:shape="rectangle">
    <gradient Android:startColor="@color/azulado" 
              Android:endColor="@color/azulBrillante"
              Android:angle="270" />
     <corners Android:radius="@dimen/corner_radius" />
     <stroke Android:width="2px" 
             Android:color="@color/blanco" />
 </shape>

button_unsel.xml

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" 
       Android:shape="rectangle">
    <gradient Android:startColor="@color/botonesD" 
              Android:endColor="@color/botones"
              Android:angle="270" />
    <corners Android:radius="@dimen/corner_radius" />
    <stroke Android:width="2px" 
            Android:color="@color/blanco" />
</shape>

Et le sélecteur, button.xml:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:drawable="@drawable/button_sel"  
          Android:state_selected="true" 
          Android:state_pressed="true"/>
<item Android:drawable="@drawable/button_unsel" 
      Android:state_selected="false" 
      Android:state_pressed="false"/>
</selector>

Et ici, j'appelle le drawable comme arrière-plan:

 <style name="button">
    <item name="Android:background">@drawable/button</item>
    <item name="Android:textSize">@dimen/text_size</item>
    <item name="Android:padding">@dimen/padding_button</item>
    <item name="Android:textColor">@color/blanco</item>
 </style>

Je vous remercie!!!!

30
croigsalvador

Le premier élément de votre sélecteur n'est utilisé que lorsque le bouton est enfoncé ET sélectionné. Si vous souhaitez utiliser button_sel lorsque votre bouton est enfoncé OR sélectionné, vous devriez faire quelque chose comme ceci:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:drawable="@drawable/button_sel" Android:state_selected="true" />
    <item Android:drawable="@drawable/button_sel" Android:state_pressed="true" />
    <item Android:drawable="@drawable/button_unsel" />
</selector>

Les éléments sont évalués de haut en bas, le dernier étant celui par défaut. Bien que je ne sois pas sûr que state_selected ait du sens pour les boutons.

54
brillenheini

Peut utiliser un élément en ligne de forme.

   <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
        <item Android:state_pressed="true" >
            <shape....>
        </item>
        <item Android:state_selected="true" >
            <shape....>
        </item>
        <item Android:state_pressed="true" Android:state_selected="true" >
            <shape...>
        </item>
   </selector>

Comme échantillon :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_selected="true" >
        <shape
            Android:shape="rectangle">
            <gradient Android:startColor="@color/md_amber_300"
                Android:endColor="@color/md_amber_50"
                Android:angle="270" />
            <corners Android:radius="@dimen/fab_margin" />
            <stroke Android:width="2px"
                Android:color="@color/primaryColorDark_orange" />
        </shape>
    </item>
    <item Android:state_pressed="true" >
        <shape
            Android:shape="rectangle">
            <gradient Android:startColor="@color/md_amber_300"
                Android:endColor="@color/md_amber_50"
                Android:angle="270" />
            <corners Android:radius="@dimen/fab_margin" />
            <stroke Android:width="2px"
                Android:color="@color/primaryColorDark_orange" />
        </shape>
    </item>
    <item Android:state_pressed="true" Android:state_selected="true" >
        <shape
            Android:shape="rectangle">
            <gradient Android:startColor="@color/md_teal_500"
                Android:endColor="@color/md_blue_400"
                Android:angle="270" />
            <corners Android:radius="@dimen/fab_margin" />
            <stroke Android:width="2px"
                Android:color="@color/md_amber_A400" />
        </shape>
    </item>
</selector>
8
Ahmad Aghazadeh