web-dev-qa-db-fra.com

Android Utilisation de la liste des calques pour le sélecteur de bouton

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?

45
Amandeep Chugh

É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"

123
Sunil Kumar Sahoo

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>
8
Clark Battle

Remplacez simplement la balise shape par votre layer-list et tout fonctionnera bien.

2
Mygod