1.Selector
item是从上往下匹配的,如果匹配到一个item那它就将采用这个item,后面的就会忽略,而不是采用最佳匹配的规则;所以设置默认的状态,一定要写在最后,如果写在前面,则后面所有的item都不会起作用了。
drawable的item中可以有以下属性:
selector一般使用四种状态:
android:state_focused
android:state_pressed
android:state_selected
android:state_enabled
- android:state_pressed=[“true” | “false”]
“true”表示按下状态使用(例如按钮按下);“false”
表示非按下状态使用。 - android:state_focused=[“true” | “false”]
“true”表示按下状态使用(例如按钮按下);“false”
表示非按下状态使用。 - android:state_selected=[“true” | “false”]
“true”表示选中状态使用(例如Tab 打开);“false”
表示非选中状态使用。 - android:state_active=[“true” | “false”]
设置是否被激活状态,true表示被激活,false表示未激活,API Level 11及以上才支持,可通过代码调用控件的setActivated(boolean)方法设置是否激活该控件 - android:state_checkable=[“true” | “false”]
“true”表示可勾选状态时使用;“false”表示非可
勾选状态使用。 - android:state_checked=[“true” | “false”]
“true”表示勾选状态使用;“false”表示非勾选
状态使用。 - android:state_enabled=[“true” | “false”]
“true”表示可用状态使用(能接收触摸/点击事件);
“false”表示不可用状态使用。 - android:state_window_focused=[“true” | “false”]
“true”表示应用程序窗口有焦点时使用(应用程序
在前台);“false”表示无焦点时使用(例如Notification栏拉
下或对话框显示)。
这篇文章有详细介绍:
2.shape
这篇文章介绍的很细,还有实例:
这篇文章细节方面不错:
还有就是这篇文章有个地方解决了我一个贼烦心的bug:size: width,height,通常shape都是作为background的,所以这个size通常不会有效,而是控件的宽高为准,当然,当作为imageview的src的时候,这个size默认还是会有用的.
就是这里,我想添加一个白色的十字加号,结果导致整个布局都成了白色,最后解决结果是用的item的right,button。。。。。之类的,对于这里我还不是很明白,如果各位有什么高见或者更好的解决办法,可以留言。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 圆角 -->
<corners
<!-- radius与其它四个并不能共同使用 ->
android:radius="9dp"
android:topLeftRadius="2dp"
android:topRightRadius="2dp"
android:bottomLeftRadius="2dp"
android:bottomRightRadius="2dp"/><!-- 设置圆角半径 -->
<!-- 渐变 -->
<gradient
<!-- 渐变起始点,中间点和结束点颜色 -->
android:startColor="@android:color/white"
android:centerColor="@android:color/black"
android:endColor="@android:color/black"
<!-- 使用LevelListDrawable时就要设置为true。设为false时才有渐变效果 -->
android:useLevel="true"
<!-- 渐变角度,必须为45的整数倍 -->
android:angle="45"
<!-- 渐变默认的模式为android:type="linear",即线性渐变,还有radial(放射性渐变)、sweep(扫描式渐变)-->
<!-- 可以指定渐变为径向渐变,android:type="radial",径向渐变需要指定半径android:gradientRadius -->
android:type="radial"
android:gradientRadius="90"
<!-- //渐变中心X,y的相当位置,范围为0-1 -->
android:centerX="0"
android:centerY="0"/>
<!-- 间隔 -->
<padding
android:left="2dp"
android:top="2dp"
android:right="2dp"
android:bottom="2dp"/><!-- 各方向的间隔 -->
<!-- 大小 -->
<size
android:width="50dp"
android:height="50dp"/><!-- 宽度和高度 -->
<!-- 填充 -->
<solid
android:color="@android:color/white"/><!-- 填充的颜色 -->
<!-- 描边 -->
<stroke
android:width="2dp"
android:color="@android:color/black"
<!-- 虚线的宽度,值为0时是实线 -->
android:dashWidth="1dp"
<!-- 虚线的间隔 -->
android:dashGap="2dp"/>
</shape>
- 填充solid:设置填充的颜色
- 间隔padding:设置四个方向上的间隔
- 大小size:设置大小
- 圆角corners:同时设置五个属性,则Radius属性无效
android:Radius=”20dp” 设置四个角的半径
android:topLeftRadius=”20dp” 设置左上角的半径
android:topRightRadius=”20dp” 设置右上角的半径
android:bottomLeftRadius=”20dp” 设置右下角的半径
android:bottomRightRadius=”20dp” 设置左下角的半径 - 描边stroke:dashWidth和dashGap属性,只要其中一个设置为0dp,则边框为实现边框
android:width=”20dp” 设置边边的宽度
android:color=”@android:color/black” 设置边边的颜色
android:dashWidth=”2dp” 设置虚线的宽度
android:dashGap=”20dp” 设置虚线的间隔宽度 - 渐变gradient:当设置填充颜色后,无渐变效果。angle的值必须是45的倍数(包括0),仅在type=”linear”有效,不然会报错。
angle对应值的起点如图:
除了上面的属性之外,shape本身也是可以设置自身的形状的:
android:shape=["rectangle" | "oval" | "line" | "ring"]
1、rectangle (矩形):当我们不指定shape属性时,默认就是矩形的。
2、oval(椭圆)
3、line(线形)
4、ring(环形)
//下面的属性只有在android:shape="ring时可用:
android:innerRadius 尺寸,内环的半径。
android:innerRadiusRatio 浮点型,以环的宽度比率来表示内环的半径
android:thickness 尺寸,环的厚度
android:thicknessRatio 浮点型,以环的宽度比率来表示环的厚度
android:useLevel boolean值,如果当做是LevelListDrawable使用时值为true,否则为false.