Android XML——selector标签

本文介绍了Android XML中selector标签的使用,包括它如何根据View的状态改变形状、背景、图片和文字颜色。selector包含的属性如Dither、Visible等,并详细讲解了selector的常用状态,如state_enabled、state_pressed等,以及它们在不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建:在res/drawable文件夹下创建:batch_sel_btn.xml
使用:在XML中
android:background="@drawable/batch_sel_btn"
android:drawableLeft="@drawable/batch_sel_btn"
android:textColor="@drawable/batch_sel_btn"

selector可根据view的不同状态改变其形状,背景,图片,文字颜色等。
selector包括有selector和item两种属性,其中selector为一级属性,其余为item子属性,子属性可以选择定义。基本结构如下:

<selector xmlns:android="http://schemas.android.com/apk/res/android"
                    >
    <item  />
</selector>
1.selector包含的属性:
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:dither="true"
    android:visible="false"
    android:enterFadeDuration="1000"
    android:exitFadeDuration="1000"
    android:variablePadding="true"
    android:autoMirrored="true"
    android:constantSize="false">

Dither:值为“true”时,将在位图的像素配置与屏幕不同时(例如:ARGB 8888 位图和 RGB 565 屏幕)启用位图的抖动;值为“false”时则停用抖动。默认值为 true。    
Visible:设置初始的可见性状态,默认为false。
ExitFadeDuration:状态改变时,旧状态消失时的淡出时间,单位毫秒。
EnterFadeDuration:状态改变时,新状态展示时的淡入时间,单位毫秒。        
VariablePadding:如果可绘制对象的内边距,应根据选择的当前状态而变化,则值为“true”;如果内边距应保持不变(基于所有状态的最大内边距),则值为“false”。启用此功能要求您在状态变更时处理执行布局,这通常不受支持。默认值为 false。 
AautoMirrored:设置图片是否需要镜像反转,当布局方向是RTL,即从右到左布局时才有用。 
ConstantSize:可绘制对象报告的内部大小,在状态变更时保持不变,则值为“true”(大小是所有状态的最大值);如果大小根据当前状态而变化,则值为“false”。默认值为 false。

2.selector的常用状态:

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表示未获得焦点,例如拉下通知栏或弹出对话框时,当前界面就会失去焦点;
android:state_activated: 设置是否被激活状态,true表示被激活,false表示未激活,可通过代码调用控件的setActivated(boolean)方法设置是否激活该控件
android:state_hovered: 设置是否鼠标在上面滑动的状态,true表示鼠标在上面滑动,默认为false

selector可作为drawable和color资源使用,可以添加多个item标签
1.作为drawable资源使用时,item必须指定android:drawable属性。drawable=可以是shape也可以是图片,例如

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/shape1" android:state_activated="false" />
    <item android:drawable="@drawable/shape2" android:state_activated="true" />
</selector>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/picture1" android:state_activated="false" />
    <item android:drawable="@mipmap/picture2" android:state_activated="true" />
</selector>

2.作为color资源使用时,item必须指定android:color属性。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/color1" android:state_activated="false" />
    <item android:color="@color/color2" android:state_activated="true" />
</selector>
### 使用 Android Selector 实现不同状态下的 UI 效果 #### 创建 XML 文件定义选择器 为了实现在不同状态下显示不同的UI效果,在`res/drawable`目录下创建一个新的XML文件来定义选择器。此文件指定了各种可能的状态及其对应的绘制资源。 ```xml <!-- res/drawable/button_selector.xml --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 当按钮被禁用时应用的颜色或图片 --> <item android:drawable="@color/disabled_color" android:state_enabled="false"/> <!-- 当按下按钮时使用的颜色或图片 --> <item android:drawable="@color/pressed_color" android:state_pressed="true"/> <!-- 默认情况下(即没有任何特定状态激活时)使用的颜色或图片 --> <item android:drawable="@color/default_color"/> </selector> ``` 上述代码展示了如何设置当控件处于不同交互状态时应呈现的不同外观[^1]。 #### 将选择器应用于视图组件 一旦定义好了选择器,就可以将其作为背景或其他属性分配给任何支持这些特性的View对象。例如: ```java Button myButton = findViewById(R.id.my_button); myButton.setBackgroundResource(R.drawable.button_selector); // 设置自定义的选择器为背景 ``` 或者直接在布局文件中指定: ```xml <Button ... android:background="@drawable/button_selector" /> ``` 这使得每当用户的操作改变了该视图的状态——比如点击它或是启用/禁用了这个元素——都会触发相应的变化并展示预设的效果[^2]。 #### 自定义属性扩展功能 除了基本的状态切换外,还可以利用自定义属性进一步增强选择器的功能。例如,可以通过调用`setEnabled()`方法改变一个View的有效性状态从而影响其Drawable的表现形式。 另外值得注意的是,除了简单的颜色变化之外,也可以引入更复杂的图形变换如渐变、波纹等特效来丰富用户体验[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值