一、前提
selector为状态选择器,一般使用在各种操作状态下,主要体现在字体,背景的切换方面,我们可以动态的使用代码去设置!也可以使用selector状态选择器去快速实现,因为它简单方便,复用性强!
二、目标
selector
三、内容
1、类型
//设置是否按压状态,一般在true时设置该属性,表示已按压状态,默认为false
android:state_pressed
//设置是否选中状态,true表示已选中,false表示未选中
android:state_selected
//设置是否勾选状态,主要用于CheckBox和RadioButton,true表示已被勾选,false表示未被勾选
android:state_checked
//设置勾选是否可用状态,类似state_enabled,只是state_enabled会影响触摸或点击事件,state_checkable影响勾选事件
android:state_checkable
//设置是否获得焦点状态,true表示获得焦点,默认为false,表示未获得焦点
android:state_focused
//设置触摸或点击事件是否可用状态,一般只在false时设置该属性,表示不可用状态
android:state_enabled
//设置当前窗口是否获得焦点状态,true表示获得焦点,false 表示未获得焦点,例如拉下通知栏或弹出对话框时, 当前界面就会失去焦点;另外,ListView的ListItem获得焦点时也会触发true状态,可以理解为当前窗口就是ListItem本身
android:state_window_focused
//设置是否被激活状态,true表示被激活,false表示未激活,API Level 11及以上才支持,可通过代码调用控件的
android:state_activated
//方法设置是否激活该控件
setActivated(boolean)
//设置是否鼠标在上面滑动的状态**,true表示鼠标在上面滑动,默认为false,API Level 14及以上才支持
//补充:selector标签下有两个比较有用的属性要说一下,添加了下面两个属性之后,则会在状态改变时出现淡入淡出效果,
//但必须在API Level 11及以上才支持
android:state_hovered
//状态改变时,旧状态消失时的淡出时间,以毫秒为单位
android:exitFadeDuration
//状态改变时,新状态展示时的淡入时间,以毫秒为单位
android:enterFadeDuration
2、布局
先创建一个新的xml文件
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
>
</selector>
再在布局文件中添加一个按钮
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="15dp"
android:orientation="vertical"
>
<Button
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="button"
android:textSize="20sp"
android:textColor="#000000"
android:background="@drawable/selector"
/>
</LinearLayout>
3、常用类型介绍
(1)android:state_pressed,按压效果,点击后改变颜色
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
>
<item android:state_pressed="true">
<shape>
<solid android:color="#FF0000"/>
<corners android:radius="20dp"/>
</shape>
</item>
<item android:state_pressed="false">
<shape>
<solid android:color="#00FF00"/>
<corners android:radius="20dp"/>
</shape>
</item>
</selector>
这里面便用到了上次讲到的shape属性,具体不多说,selector状态选择器中只有一个元素就是item,其余的效果展示都要写在item中
2、android:state_checked
先在布局文件中添加两个复选框
<CheckBox
android:id="@+id/checkbox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="唱歌"
android:textSize="20sp"
android:button="@drawable/selector"
/>
<CheckBox
android:id="@+id/checkbox2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="跳舞"
android:textSize="20sp"
android:button="@drawable/selector"
/>
改变按钮的样式,提前加入两张图片,可自选
在selector.xml文件中添加
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
>
<item android:state_checked="true" android:drawable="@drawable/yes">
</item>
<item android:state_checked="false" android:drawable="@drawable/no">
</item>
</selector>
RadioButton相似,再次不做展示
3、android:state_focused
先添加两个编辑框,因为获取焦点一般都用在编辑框
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入"
android:background="@drawable/selector"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入"
android:layout_marginTop="10dp"
android:background="@drawable/selector"
/>
在xml文件中可以不写false的选项
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
>
<item android:state_focused="true">
<shape>
<solid android:color="#aca7a7"/>
</shape>
</item>
</selector>
四、总结
这些类型可以共用,也就是一个组件可以实现多个元素,再遇见其他需要的类型时会再做介绍