a.c*_*ch. 12 android colors xml-drawable statelistdrawable shapedrawable
我定义了以下drawable my_background_drawable.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:gravity="center"
android:shape="rectangle">
<solid android:color="@color/color_stateful" />
</shape>
</item>
<item android:drawable="@drawable/selector_png_drawable" />
</layer-list>
Run Code Online (Sandbox Code Playgroud)
我还定义了以下颜色状态列表资源color_stateful.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:color="#FF00ff00"/>
<item android:color="#FFff0000"/>
</selector>
Run Code Online (Sandbox Code Playgroud)
当我将my_background_drawable某个视图设置为某个视图的背景时,我无法观察到color_stateful.xml为我的形状定义的颜色的任何变化,而视图状态实际上已更改(selector_png_drawable.xml是指示符).
但是,当我通过my_background_drawable.xml以下方式修改我时,一切都很好:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- This doesn't work
<item>
<shape android:gravity="center"
android:shape="rectangle">
<solid android:color="@color/color_stateful" />
</shape>
</item>
-->
<item>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:gravity="center"
android:shape="rectangle">
<solid android:color="#FF00ff00" />
</shape>
</item>
<item>
<shape android:gravity="center"
android:shape="rectangle">
<solid android:color="#FFff0000" />
</shape>
</item>
</selector>
</item>
<item android:drawable="@drawable/selector_png_drawable"" />
</layer-list>
Run Code Online (Sandbox Code Playgroud)
因此,当ColorStateList资源在a中使用ShapeDrawable或者我做错了时,颜色状态信息是否真的丢失了?
Dev*_*red 25
A ColorStateList不能作为<solid>XML定义中的属性传递,也不能传递给任何属性<shape>.此属性作为Color资源从XML中膨胀,然后传递给Drawable的setColor()方法,该方法只接受一个ARGB值.
只有一种类型的Drawable实例可以根据状态包含和显示多个项目,也就是说StateListDrawable,这是您在膨胀时获得的内容<selector>.所有其他Drawable实例仅仅是该集合的成员或独立绘制的.
另请注意,膨胀<shape>物品实际上是a GradientDrawable而不是a ShapeDrawable.如果您查看源代码中的inflate()方法,则可以获得有关如何使用每个属性的所有详细信息.GradientDrawable
HTH!
| 归档时间: |
|
| 查看次数: |
5127 次 |
| 最近记录: |