Android - 这三个 xml 文件有啥区别?
Posted
技术标签:
【中文标题】Android - 这三个 xml 文件有啥区别?【英文标题】:Android - What is the difference between these three xml files?Android - 这三个 xml 文件有什么区别? 【发布时间】:2019-07-21 22:22:11 【问题描述】:这三个xml文件在android中有什么区别?
以选择器为根元素的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>
在哪种情况下使用哪个。一些小例子将不胜感激。谢谢!!!
【问题讨论】:
【参考方案1】:图层列表 来自文档:管理其他 Drawable 数组的 Drawable。这些是按数组顺序绘制的,因此索引最大的元素被绘制在顶部。创建一个 LayerDrawable。
当您想将多个可绘制对象合并为一个时使用它,例如您可以使用它为图标添加背景。
选择器(状态列表) 来自文档: StateListDrawable 是在 XML 中定义的可绘制对象,它使用多个不同的图像来表示相同的图形,具体取决于对象的状态。例如,一个 Button 小部件可以存在于几种不同状态中的一种(按下、聚焦或两者都没有),并且使用可绘制的状态列表,您可以为每个状态提供不同的背景图像。
它可以用来在不同的条件下显示不同的drawable。
形状 来自文档: 定义几何形状的 XML 文件,包括颜色和渐变。创建一个 GradientDrawable。
当您想要显示单个形状时应该使用它。它可以在 LayerList 中用于向图像添加形状,也可以与选择器一起使用以在形状之间切换。 有趣的部分(希望如此) 所有这 3 个都代表可绘制对象,因此您可以将它们组合起来以满足您的需求。例如,我可以将选择器作为根元素,其中包含 LayerList 并且每个图层列表都可以有形状。 动态处理这些时,所有 3 个都是 Drawable 类的子类。
查看文档了解更多信息: https://developer.android.com/guide/topics/resources/drawable-resource
【讨论】:
这个答案有很好的解释。应该足以消除您的疑虑。【参考方案2】:选择器允许您根据状态(例如,按下、选中等)使用不同的可绘制对象或形状。例如,当您希望按钮处于按下状态和非按下状态时,请使用它们。
Shape 让您可以绘制简单的形状,并对它们应用边框半径、颜色、渐变等。
Layer-list 可让您将可绘制对象层叠在一起以创建复合可绘制对象。例如,创建带边框背景的常用方法是创建一个图层列表,其中包含一个矩形作为一项,其中一个稍小的矩形(例如,具有 1dp 填充)。较大的矩形是您的边框轮廓。
【讨论】:
以上是关于Android - 这三个 xml 文件有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
各位,工程下libs文件夹与Android Private Libraries有啥区别
iOS中的Animation、Transition和Transaction这三个概念有啥区别
surfer、arcgis、mapgis这三个软件有啥区别?