Android Studio属性学习(二)——selector属性

一、前提
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>

在这里插入图片描述

四、总结
这些类型可以共用,也就是一个组件可以实现多个元素,再遇见其他需要的类型时会再做介绍

原创文章 30 获赞 5 访问量 1894

猜你喜欢

转载自blog.csdn.net/qq_41890177/article/details/105894114