Android中的Selector的用法

本文介绍如何使用Android中的Selector来定制ListView及Button控件的背景,包括创建Selector XML文件的方法、定义不同状态下的背景图片,以及如何在代码或布局文件中应用这些自定义样式。

Android中的Selector主要是用来改变ListView和Button控件的默认背景。其使用方法可以按一下步骤来设计:


(以在mylist_view.xml为例)


1.创建mylist_view.xml文件

首先在res目录下新建drawable文件夹,再在新建的drawable文件夹中新建mylist_view.xml,其目录结构为:res/drawable/mylist_view.xml。


2.根据具体需求编辑mylist_view.xml文件

新建mylist_view.xml文件后,在没有添加任何属性时其内部代码结构为:

  1. <?xml version="1.0" encoding="utf-8" ?>     
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">   
  3.    
  4. </selector>  

下面就可以根据项目需求,在其内部定义为自己想要的样式了,主要属性如下:

  1. <?xml version="1.0" encoding="utf-8" ?>     
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">   
  3. <!-- 默认时的背景图片-->    
  4.   <item android:drawable="@drawable/pic1" />      
  5. <!-- 没有焦点时的背景图片 -->    
  6.   <item android:state_window_focused="false"     
  7.         android:drawable="@drawable/pic1" />     
  8. <!-- 非触摸模式下获得焦点并单击时的背景图片 -->    
  9.   <item android:state_focused="true" android:state_pressed="true"   android:drawable"@drawable/pic2" />   
  10. <!-- 触摸模式下单击时的背景图片-->    
  11. <item android:state_focused="false" android:state_pressed="true"   android:drawable="@drawable/pic3" />    
  12. <!--选中时的图片背景-->    
  13.   <item android:state_selected="true"   android:drawable="@drawable/pic4" />     
  14. <!--获得焦点时的图片背景-->    
  15.   <item android:state_focused="true"   android:drawable="@drawable/pic5" />     
  16. </selector>  

3.引用 mylist_view.xml文件


三种方法可以来引用刚才创建的文件:

(1)在ListView中添加如下属性代码

  1. android:listSelector="@drawable/mylist_view"  

(2)在 ListView的item界面中添加如下属性代码

  1. android:background="@drawable/mylist_view"  

(3)利用JAVA代码直接编写

  1. Drawable drawable = getResources().getDrawable(R.drawable.mylist_view);   
  2. listView.setSelector(drawable);  

为了防止列表拉黑的情况发生,需要在 ListView中添加以下的属性代码

  1. android:cacheColorHint="@android:color/transparent"  

属性介绍:

android:state_selected选中

android:state_focused获得焦点

android:state_pressed点击

android:state_enabled设置是否响应事件,指所有事件


<think> 我们正在讨论Android中的<selector>用法,它通常用于定义不同状态下的资源(如背景、颜色等)。 以下是一个详细的使用说明和示例: 1. 基本结构:selector是一个XML文件,放在res/drawable或res/color目录下。 2. 状态列表:通过<item>元素定义不同状态下的资源,每个item可以指定一个或多个状态(如state_pressed, state_selected等)。 3. 状态匹配:系统将从上到下匹配第一个符合当前状态条件的item,因此通常将默认状态(无状态)放在最后。 示例:创建一个按钮背景选择器(不同状态显示不同颜色) 文件位置:res/drawable/button_bg.xml 代码示例: ```xml <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 按钮被按下时 --> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="#FF0000"/> <!-- 红色 --> </shape> </item> <!-- 按钮被选中时 --> <item android:state_selected="true"> <shape android:shape="rectangle"> <solid android:color="#0000FF"/> <!-- 蓝色 --> </shape> </item> <!-- 默认状态 --> <item> <shape android:shape="rectangle"> <solid android:color="#00FF00"/> <!-- 绿色 --> </shape> </item> </selector> ``` 在布局中引用: ```xml <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/button_bg" android:text="按钮"/> ``` 常用状态属性: - android:state_pressed: 按下状态 - android:state_selected: 选中状态(如通过方向键选择) - android:state_focused: 获得焦点状态 - android:state_enabled: 可用状态(false表示禁用状态) - android:state_checked: 勾选状态(用于CheckBox等) - android:state_activated: 激活状态(如列表项被激活) 注意事项: 1. 状态条件可以组合,例如:android:state_pressed="true" android:state_enabled="false" 2. 使用颜色选择器时,可以放在res/color目录下,然后在TextView的textColor属性中引用。 颜色选择器示例(res/color/text_color_selector.xml): ```xml <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:color="#FF0000"/> <item android:color="#000000"/> </selector> ``` 在TextView中使用: ```xml <TextView ... android:textColor="@color/text_color_selector" /> ``` 通过以上示例,我们可以灵活使用selector为不同状态设置不同的背景或文本颜色。 §§相关问题§§ 1. 如何在selector中为同一个状态同时设置背景和边框? 2. 如果我想在按钮禁用时改变背景颜色,应该使用哪个状态属性? 3. 在selector中,为什么有时候状态不生效?可能的原因是什么? 4. 如何为CheckBox自定义不同状态下的勾选图标? 5. selector能否用于设置动画效果? </think>以下是 Android 中 `<selector>` 的详细用法说明: ### 一、基本概念 `<selector>` 是 Android 中的状态列表选择器,用于根据视图的不同状态(如按下、选中、禁用等)显示不同的资源。 ### 二、核心用法 #### 1. 创建选择器文件 在 `res/drawable/` 目录下创建 XML 文件(例:`btn_selector.xml`) ```xml <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 按下状态 --> <item android:state_pressed="true" android:drawable="@drawable/btn_pressed" /> <!-- 选中状态 --> <item android:state_selected="true" android:drawable="@drawable/btn_selected" /> <!-- 禁用状态 --> <item android:state_enabled="false" android:drawable="@drawable/btn_disabled" /> <!-- 默认状态 --> <item android:drawable="@drawable/btn_normal" /> </selector> ``` #### 2. 常用状态属性 | 属性 | 说明 | |--------------------------|-----------------------------| | `state_pressed` | 按下状态 | | `state_selected` | 选中状态 | | `state_checked` | 勾选状态(如CheckBox) | | `state_enabled` | 启用/禁用状态 | | `state_focused` | 获得焦点状态 | | `state_activated` | 被激活状态(如列表项) | | `state_window_focused` | 窗口获得焦点状态 | #### 3. 在布局中应用 ```xml <Button android:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/btn_selector" android:text="状态按钮" /> ``` ### 三、高级用法 #### 1. 组合状态 ```xml <item android:state_pressed="true" android:state_enabled="true" android:drawable="@drawable/btn_active_pressed" /> ``` #### 2. 颜色选择器 在 `res/color/` 下创建文本颜色选择器: ```xml <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:color="#FF0000"/> <item android:state_selected="true" android:color="#00FF00"/> <item android:color="#000000"/> </selector> ``` #### 3. 在代码中切换状态 ```java Button btn = findViewById(R.id.myButton); btn.setSelected(true); // 设置为选中状态 btn.setEnabled(false); // 设置为禁用状态 ``` ### 四、使用注意事项 1. **匹配顺序**:系统从上到下匹配第一个符合的状态 2. **默认状态**:必须放在最后(无状态条件的item) 3. **性能优化**:使用 `<shape>` 替代图片资源 4. **尺寸适配**:使用 `android:constantSize="true"` 保持尺寸一致 ### 五、完整示例(形状+颜色) ```xml <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 按下状态:橙色圆角矩形 --> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="#FFA500"/> <corners android:radius="8dp"/> </shape> </item> <!-- 选中状态:蓝色圆角矩形 --> <item android:state_selected="true"> <shape android:shape="rectangle"> <solid android:color="#0000FF"/> <corners android:radius="8dp"/> </shape> </item> <!-- 默认状态:灰色圆角矩形 --> <item> <shape android:shape="rectangle"> <solid android:color="#CCCCCC"/> <corners android:radius="8dp"/> </shape> </item> </selector> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值