Android selector标签

selector标签中每个Drawable都对应着View的一种状态,这样系统会根据View的状态来选择合适的Drawable。主要用于设置可点击View的背景。比如在ListView的item,TextView,Button,CheckBox等控件。

()< selector >标签

android:constantSize     

selector的固有大小是否不随着其状态的改变而改变,true表示selector的固有大小保持不变。这时它的固有大小是内部所有Drawable的固有大小的最大值。false(默认值)表示会改变。

android:dither 

是否开启抖动效果,默认值为true。

android:variablePadding 

selector的padding是否随着其状态的改变而改变。true表示会改变,false(默认值)表示selector的padding是内部所有的Drawable的padding的最大值,建议不开启。

()< item >标签

 android:state_focused  
 设置是否获得焦点状态,true表示获得焦点,默认为false,表示未获得焦点。  

android:state_window_focused    
设置当前窗口是否获得焦点状态,true表示获得焦点,false表示未获得焦点,
例如拉下通知栏或弹出对话框时,当前界面就会失去焦点;
另外,ListView的ListItem获得焦点时也会触发true状态,可以理解为当前窗口就是ListItem本身。

android:state_enabled    
设置触摸或点击事件是否可用状态,一般只在false时设置该属性,表示不可用状态。

android:state_checkable    
设置勾选是否可用状态,
类似state_enabled,只是state_enabled会影响触摸或点击事件,而state_checkable影响勾选事件。

android:state_checked    
设置是否勾选状态,主要用于CheckBox和RadioButton,true表示已被勾选,false表示未被勾选。

android:state_selected 
设置是否选中状态,true表示已选中,false表示未选中

android:state_pressed 
设置是否按压状态,一般在true时设置该属性,表示已按压状态,默认为false。

android:state_activated 
设置是否被激活状态,true表示被激活,false表示未激活,
API Level 11及以上才支持,可通过代码调用控件的setActivated(boolean)方法设置是否激活该控件。

android:state_active
android:state_single
android:state_first
android:state_middle
android:state_last
android:state_accelerated

android:state_hovered 
设置是否鼠标在上面滑动的状态,true表示鼠标在上面滑动,默认为false,API Level 14及以上才支持。

android:state_drag_can_accept
android:state_drag_hovered
android:state_accessibility_focused

android:drawable  
当前控件指定drawable资源id

selector作为drawable使用时,放在res/drawable,item必须指定android:drawable属性,selector作为color使用时,则放在res/color目录下,item必须指定android:color属性。

View定义了四种不同的状态
这里写图片描述
(2)一个窗口只能有一个视图获得焦点(focus),而一个窗口可以有多个视图处于”selected”状态中。

总结:
focused状态一般是由按键操作引起的;
pressed状态是由触摸消息引起的;
selected则完全是由应用程序主动调用setSelected()进行控制。

例如:当我们触摸某个控件时,会导致pressed状态改变;获得焦点时,会导致focus状态变化。于是,我们可以通过这种更新后状态值去更新我们对应的Drawable对象了。

注:
(1)每当状态发生改变时,系统会在state list中从上到下遍历寻找与之相匹配的状态。这里在遍历时只会取去当前状态相匹配的第一个Item,而不是最匹配的那一个。

(2)TextView在使用选择器时需要注册点击事件,不然不会触发选择器,具体原因也不清楚

(3)android:color这个属性来设置不同状态下的颜色,但是如果是设置图片就必须使用android:drawable属性,不然就会报错。

(4)在读取状态时,只会读取符合当前View状态的第一个Item的内容。如果selector的第一个item中没有标注任何一个状态,那么它表示使用任何状态,将会在View每次状态变化时只读取这个item的内容。所以,这样的默认的配置,一般都会置于最下面的item中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值