android selector 小坑

android selector 小坑

  • 常见selector属性
  • 使用selector遇到的问题

常见selector属性

  • android:state_selected是选中
  • android:state_focused是获得焦点
  • android:state_pressed是点击
  • android:state_enabled是设置是否响应事件,指所有事件
  • android:state_checkable一般用于单复选框
  • android:state_window_focused表示应用程序窗口有无焦点时使用

使用selector遇到的问题

有时候,我们会有一些特殊的需求如选中一个按钮时,未选中时,还有就是禁用按钮,实现多个状态下的一个selector。这时我们发现如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@color/green" android:state_pressed="true" />
    <item android:drawable="@color/red" android:state_enabled="false" />

    <item android:drawable="@color/blue"  android:state_pressed="false"/>
</selector>

上述xml配置中,使用java代码将按钮或View setEnabled(false)都达不到我们预想的效果,禁用按钮或View的状态没法显示,selector原理是通过匹配到最近的地方与switch语句类似后,不再继续向下匹配,因而结果不一定是最匹配的。而为了使selector能更好匹配,我们一般将无状态也就是正常状态放在最后且尽量指明互斥的量。如下面代码:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/red" android:state_enabled="false" />
    <item android:drawable="@color/blue"  android:state_enabled="true" android:state_pressed="false"/>
    <item android:drawable="@color/green" android:state_enabled="true" android:state_pressed="true" />
</selector>

如禁用状态(state_enabled)和非禁用状态(state_pressed)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值