我可以在选择器内使用layer-list吗?

13

我有以下可绘制对象

<!-- button_shape.xml -->
<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <shape android:shape="rectangle">
            <corners android:radius="3dp"/>
            <solid android:color="#006600" />
        </shape>
    </item>

    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <corners android:radius="3dp"/>
            <solid android:color="#003300" />
        </shape>
    </item>
</selector>

<!-- button_shape_shadowed.xml -->
<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="5dp"/>
            <solid android:color="#D0D0D0"/>
        </shape>
    </item>
    <item>
        <inset
            android:drawable="@drawable/button_shape"
            android:insetBottom="5dp"
            android:insetLeft="5dp"
            android:insetRight="5dp"
            android:insetTop="5dp">
        </inset>
    </item>
</layer-list>

有办法将它们合并为一个吗?我的主要问题在于我不能在 inset 中嵌套 selector。由于 button_shape.xml 没有在其他任何地方使用,我不想无故创建额外的文件。


发布一张你正在尝试做的图片。 - Rod_Algonquin
我正在尝试创建一个带有阴影的按钮。上面的代码完美地运行着。但是我想将这两个XML文件合并成一个。 - Khanh Nguyen
1
为什么不能在<inset>内部使用<layer-list>?这似乎是一个有效的组合。你合并的可绘制XML长什么样? - alanv
1个回答

24

谢谢各位!以下内容确实有效,尽管Android Studio会提示selector不能放在inset内部。

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="5dp"/>
            <solid android:color="#D0D0D0"/>
        </shape>
    </item>
    <item>
        <inset android:insetBottom="2dp">
            <selector>
                <item android:state_pressed="false">
                    <shape android:shape="rectangle">
                        <corners android:radius="3dp"/>
                        <solid android:color="#006600" />
                    </shape>
                </item>

                <item android:state_pressed="true">
                    <shape android:shape="rectangle">
                        <corners android:radius="3dp"/>
                        <solid android:color="#003300" />
                    </shape>
                </item>
            </selector>
        </inset>
    </item>
</layer-list>

1
以下是一个例子,在其中使用选择器与每个状态的图层列表XML:https://dev59.com/questions/-Wsy5IYBdhLWcg3wxAqO#8339852 - Dacker

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