Android - 这三个 xml 文件有什么区别?

Android - What is the difference between these three xml files?

android 中的这三个 xml 文件有什么区别?

xml 以选择器作为根元素的文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <Further Designing ... />
            ...
        </shape>
    </item>
</selector>

xml 以形状作为根元素的文件

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <Further Designing ... />
    ...
</shape>

xml 以图层列表为根元素的文件

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <Further Designing ... />
            ...
        </shape>
    </item>
    <item android:bottom="1dp">
        <shape android:shape="rectangle">
            <Further Designing ... />
            ...
        </shape>
    </item>
</layer-list>

在什么情况下使用哪个。一些例子会更受欢迎。谢谢!!!

选择器可让您根据状态(如按下、选中等)使用不同的可绘制对象或形状。例如,当您想要按钮的按下状态和 non-pressed 状态时使用它们。

Shape 可让您绘制简单的形状,并对其应用边框半径、颜色、渐变等。

Layer-list 让您可以将可绘制对象叠加在一起以创建复合可绘制对象。例如,创建带边框背景的常见方法是创建一个 layer-list,其中包含一个矩形作为一个项目,并在其中创建一个稍小的矩形(例如,使用 1dp 填充)。较大的矩形是您的边框轮廓。

图层列表
来自文档:
管理其他 Drawable 数组的 Drawable。它们是按数组顺序绘制的,因此索引最大的元素被绘制在最上面。创建 LayerDrawable.

当您想要将多个可绘制对象合并为一个时使用它,例如,您可以使用它为图标添加背景。

选择器(StateList)
来自文档:
StateListDrawable 是 XML 中定义的可绘制对象,它根据对象的状态使用多个不同的图像来表示相同的图形。例如,Button 小部件可以存在于多种不同状态之一(按下、聚焦或两者都不是),并且使用状态列表可绘制对象,您可以为每种状态提供不同的背景图像。

它可以用来在不同的条件下显示不同的drawable。

形状
来自文档:
一个 XML 定义几何形状的文件,包括颜色和渐变。创建一个 GradientDrawable.

当您想显示单个形状时应使用此选项。它可以在 LayerList 中使用以向图像添加形状,也可以与选择器一起使用以在形状之间切换。

有趣的部分(希望如此)
所有这 3 个都代表可绘制对象,因此您可以将它们组合起来以满足您的需要。例如,我可以将选择器作为根元素,其中包含 LayerList 并且每个图层列表都可以有形状。 当动态使用这些时,所有 3 个都是 Drawable class.

的子classes

查看文档了解更多信息: https://developer.android.com/guide/topics/resources/drawable-resource