Android Selector用法

网上有很多这方面的资料,但都不能用。

像下面这个:

<?xml version="1.0" encoding="utf-8" ?>   
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<!-- 默认时的背景图片-->  
  <item android:drawable="@drawable/pic1" />    
<!-- 没有焦点时的背景图片 -->  
  <item android:state_window_focused="false"   
        android:drawable="@drawable/pic1" />   
<!-- 非触摸模式下获得焦点并单击时的背景图片 -->  
  <item android:state_focused="true" android:state_pressed="true"   android:drawable= "@drawable/pic2" /> 
<!-- 触摸模式下单击时的背景图片-->  
<item android:state_focused="false" android:state_pressed="true"   android:drawable="@drawable/pic3" />  
<!--选中时的图片背景-->  
  <item android:state_selected="true"   android:drawable="@drawable/pic4" />   
<!--获得焦点时的图片背景-->  
  <item android:state_focused="true"   android:drawable="@drawable/pic5" />   
</selector>
原因是定义的顺序错了。

Android控件的状态有很多,在编译器中会给出提示,但不同的控件能够使用的状态的类别是不同的,像Button和CheckBox就有独有的状态,Button有android:state_pressed,CheckBox有android:state_checked。以Button为例,Button经常使用的状态有:android:state_window_focused,android:state_enabled,android:state_pressed,android:state_focused。这四种常用的状态能有很多组合,但这四种状态是有内在的联系的。

如下图:

这四种状态按联系分类,可分为状态互相依赖和状态不依赖。像android:state_window_focused和android:state_enabled,就是状态不互相依赖的,所以这两个有四种组合

<item android:state_window_focused="true" andriod:state_enabled="true" android:drawable="">
<item android:state_window_focused="true" android:state_enabled="false" android:drawable="">
<item android:state_window_focused="false“ android:state_enabled="false" android:drawable="">
<item android:state_window_focused="false" android:state_enabled="true" android:drawable="">

而android:state_pressed和android:state_window_focused是不依赖的,android:state_pressed和android:state_enabled是依赖的。

android:state_focused在手机上没有显示,但是如果在电视上,按钮应该就有android:state_focused的状态了。android:state_pressed和android:state_pressed两个状态在同一时间只能存在一个,并且对于Button来说,android:state_focused是依赖android:state_enabled。但对于EditText来说,android:state_foucsed不依赖android:state_enabled。

selector匹配第一个能够匹配的。所以说<item>中的状态应该是从最受限的状态到最自由的状态排列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值