Comment utiliser une liste de calques comme dessinable pour un bouton. J'ai un bouton:
<item Android:state_pressed="true">
<shape>
<gradient Android:endColor="@color/white"
Android:startColor="@color/grey_blue_light" Android:angle="90" />
<stroke Android:width="1dp" Android:color="@color/aqua_blue" />
<corners Android:radius="3dp" />
<padding Android:left="10dp" Android:top="10dp"
Android:right="10dp" Android:bottom="10dp" />
</shape>
</item>
<item Android:state_focused="true">
</item>
<item>
</item>
Maintenant, j'ai besoin d'une liste de calques à utiliser comme forme lorsque l'état du bouton est pressé:
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape Android:shape="oval">
<solid Android:color="@color/aqua_blue" />
</shape>
</item>
<item Android:top="1dp" Android:left="1dp" Android:right="1dp" Android:bottom="1dp">
<shape Android:shape="oval">
<solid Android:color="@color/aqua_blue" />
</shape>
</item>
Comment utilisons-nous cette liste de calques dans le sélecteur de bouton?
Étape-1 créer trois différents layer_list xml sous dossier dessinable pour trois états différents du bouton. par exemple, le nom de ces xml est layer1.xml, layer2.xml, layer3.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:Android="http://schemas.Android.com/apk/res/Android"
>
<item>
<shape
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle"
>
<gradient
Android:angle="270"
Android:startColor="#0000ff"
Android:endColor="#0000dd"
Android:type="linear"
/>
</shape>
</item>
</layer-list>
Étape-2 créer un xml de sélecteur nommé btn_background.xml et passer le xml layer_list dans l'attribut drawable
<selector
xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true" Android:drawable="@drawable/layer1">
</item>
<item Android:state_focused="true" Android:drawable="@drawable/layer2">
</item>
<item Android:drawable="@drawable/layer3">
</item>
</selector>
étape- Définissez le sélecteur xml comme arrière-plan du bouton Android:background="@drawable/btn_background"
La réponse de Mygod est en fait meilleure que celle acceptée. Il fonctionne et n'a besoin que d'un fichier xml. Voici quelque chose de similaire que j'ai fait. Il définit l'arrière-plan sous un dessinable avec des transparents. La même chose pourrait être faite avec un fond et une forme:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_selected="true">
<layer-list>
<item Android:drawable="@color/Black"/>
<item Android:drawable="@drawable/notes_white"/>
</layer-list>
</item>
<item>
<layer-list>
<item Android:drawable="@color/White"/>
<item Android:drawable="@drawable/notes_black"/>
</layer-list>
</item>
</selector>
Remplacez simplement la balise shape
par votre layer-list
et tout fonctionnera bien.