Android使用layer-list来创建按钮选择器

53

如何将layer-list用作按钮的可绘制图形。 我有一个按钮:

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

现在我需要一个layer-list,在按钮状态被按下时用作形状:

<?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>
我们如何在按钮选择器中使用这个层列表?
3个回答

134

步骤 1 在 drawable 文件夹下创建三个不同的 layer_list xml 文件,用于表示按钮的三种不同状态。例如,这些 xml 文件的名称可以是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>

步骤二:创建一个名为btn_background.xml的选择器xml文件,并在drawable属性中传递layer_list xml。

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

第三步 将选择器xml设置为按钮的背景:android:background="@drawable/btn_background"


2
很好的答案。但是由于在<layer-list>下只有一个<shape>元素,我认为后者可以省略。即<xml><shape></shape></xml>。对我有效。 - SoftDesigner
能否创建一个可绘制对象,其中包含三个不同的形状并依次排列?例如像这样的形状 o-------o。 - Vineeth Mohan

25

Mygod的答案实际上比被接受的更好。它有效且只需要一个xml文件。这是我做过的类似的东西。它在带有透明度的可绘制对象下设置背景。同样的事情可以通过一个背景和形状来完成:

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

很好的想法,将<layer-list>元素直接列在<item>下面,而不是创建单独的.xml文件 :) - Robyer

4

只需用你的layer-list替换shape标签,一切都会正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接