Android中的Selector(背景选择器)主要是用来改变一个按钮控件的背景,在Android UI设计中经常会遇到,比如我们在点击Button时需要有些效果的变化,这时候就要用到<selector>和<shape>。<selector>和<shape>对美化控件有很大的作用。
那么,看看都有哪些状态可以设置呢:
- android:state_enabled: 设置触摸或点击事件是否可用状态,一般只在false时设置该属性,表示不可用状态
- android:state_pressed: 设置是否按压状态,一般在true时设置该属性,表示已按压状态,默认为false
- android:state_selected: 设置是否选中状态,true表示已选中,false表示未选中
- android:state_checked: 设置是否勾选状态,主要用于CheckBox和RadioButton,true表示已被勾选,false表示未被勾选
- android:state_checkable: 设置勾选是否可用状态,类似state_enabled,只是state_enabled会影响触摸或点击事件,而state_checkable影响勾选事件
- android:state_focused: 设置是否获得焦点状态,true表示获得焦点,默认为false,表示未获得焦点
- android:state_window_focused: 设置当前窗口是否获得焦点状态,true表示获得焦点,false表示未获得焦点,例如拉下通知栏或弹出对话框时,当前界面就会失去焦点;另外,ListView的ListItem获得焦点时也会触发true状态,可以理解为当前窗口就是ListItem本身
- android:state_activated: 设置是否被激活状态,true表示被激活,false表示未激活,API Level 11及以上才支持,可通过代码调用控件的setActivated(boolean)方法设置是否激活该控件
- android:state_hovered: 设置是否鼠标在上面滑动的状态,true表示鼠标在上面滑动,默认为false,API Level 14及以上才支持
(1)带圆角,白色背景,彩色边框的矩shape_border_press
首先来定义一个带圆角,白色背景,绿色边框的矩形,在selector中设置它为单击时的背景
- <?xml version="1.0" encoding="utf-8"?>
-
- <shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle">
-
- <corners android:radius="5dp" />
-
- <solid android:color="@color/white" />
-
- <stroke
- android:width="1dp"
- android:color="@color/green" />
- </shape>
实际开发中我们可以根据需求设置其他的属性,比如<gradient> 定义使用渐变色填充,<padding> 定义几何形状的内边距,<size>定义几何形状的大小等等,在这里就不一一例举了。
然后来定义一个带圆角,白色背景,蓝色边框的矩形,在selector中设置它为不在单击状态时的背景,shape_border_nor
- <?xml version="1.0" encoding="utf-8"?>
-
- <shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle">
-
- <corners android:radius="5dp" />
-
- <solid android:color="@color/white" />
-
- <stroke
- android:width="1dp"
- android:color="@color/blue" />
- </shape>
如下就是使用我们的第二种方法来定义当我们点击一个按钮时按钮的背景选择器,是不是简单了呢?
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-
-
-
-
-
- <item android:state_window_focused="false">
- <shape android:shape="rectangle">
-
- <corners android:radius="5dp" />
-
- <solid android:color="@color/white" />
-
- <stroke android:width="1dp" android:color="@color/blue" />
- </shape>
- </item>
-
- <item android:state_pressed="true">
- <shape android:shape="rectangle">
-
- <corners android:radius="5dp" />
-
- <solid android:color="@color/white" />
-
- <stroke android:width="1dp" android:color="@color/green" />
- </shape>
- </item>
-
/*<item > 可以加一个默认item,不用写android:事件,放在最后面。
<shape>
<solid
android:color="@color/btn_normal_color"/>
<corners
android:topLeftRadius="@dimen/radius_size"
android:bottomLeftRadius="@dimen/radius_size"/>
</shape>
</item>*/
- </selector>
效果图如下:
