前言
StateListDrawable
是用于为各种控件设置不同的状态的 Drawable
效果图
GIF图,后续放上
属性解析
属性 | 说明 |
---|---|
android:drawable | 引用的 Drawable 位图, 把放到最前面,就表示组件的正常状态 |
android:state_focused | 是否获得焦点 |
android:state_window_focused | 是否获得窗口焦点 |
android:state_enabled | 控件是否可用 |
android:state_checkable | 控件可否被勾选,比如 checkbox |
android:state_checked | 控件是否被勾选 |
android:state_selected | 控件是否被选择,针对有滚轮的情况 |
android:state_pressed | 控件是否被按下 |
android:state_active | 控件是否处于活动状态,eg:slidingTab |
android:state_single | 控件包含多个子控件时,确定是否只显示一个子控件 |
android:state_first | 控件包含多个子控件时,确定第一个子控件是否处于显示状态 |
android:state_middle | 控件包含多个子控件时,确定中间一个子控件是否处于显示状态 |
android:state_last | 控件包含多个子控件时,确定最后一个子控件是否处于显示状态 |
按钮点击示例
以按钮点击前后背景改变示例在res/drawable目录下建点击背景文件 shape_btn_pressed.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#D8D4D4"/>
<corners android:radius="5dp"/>
<padding android:top="2dp" android:bottom="2dp"/>
</shape>
1、无边框按钮
在res/drawable目录下建默认背景文件 shape_btn_normal.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#0EECE5"/>
<corners android:radius="5dp"/>
<padding android:top="2dp" android:bottom="2dp"/>
</shape>
2、有边框按钮
在res/drawable目录下建默认背景文件 shape_btn_normal.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:color="#D8D4D4" android:width="5dp" />
<solid android:color="#FFFFFF"/>
<corners android:radius="5dp"/>
<padding android:top="2dp" android:bottom="2dp"/>
</shape>
使用StateListDrawable建立选择,在res/drawable目录下建默认背景文件 selector_btn.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/shape_btn_pressed"/>
<item android:drawable="@drawable/shape_btn_normal"/>
</selector>
最后按钮背景引用selector_btn_unborder即可
<Button
android:id="@+id/confirm_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确认"
android:background="@drawable/selector_btn_unborder"/>
总结
凡是需要有点击效果的控件都可以使用Drawable自定义的资源,不需要在逻辑代码里设置背景更改,并且控件有效果与无效果的对用户体验也是不一样。
1、详细ShapeDrawable使用查看 ShapeDrawable 背景自定义