Android小技巧——Selector用法

本文介绍了 Android 开发中 Selector 的使用技巧,包括解决不生效的问题、直接包含 Shape 的方法以及设置图像透明度的方式。

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

Selector生效问题

在做Android UI的时候,Selector是必不可少的,下面说一下使用selector其中一个小技巧
昨天有个小伙伴来问我,你看我明明给这个TextView设置了background,为什么不生效呢?先来看看他是怎样写的:

 <TextView
     android:background="@drawable/tv_background"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"/>
  <?xml version="1.0" encoding="utf-8"?>

//tv_background
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/shape_normal"></item>
    <item android:drawable="@drawable/shape_press" 
          android:state_pressed="true"></item>
</selector>

代码很简单,就是当正常状态下,显示shape_normal样式,当TextView被点击时使用shape_press样式,乍一看,好像没有任何问题,但为什么就不能生效呢?这里必须要说的是selector的匹配规则。

匹配规则
给一个view的某个属性设置selector时候,selector的匹配规则是从上往下匹配,当匹配到第一个符合当前状态的item就返回。

所以前面问题的原因很明显了,当代码执行的时候,即使TextView处于press状态,但它也属于正常状态下的一种,所以在第一个就匹配成功了,当然就不会匹配到下面的shape_press样式了。所以如果需要有个press态,调一下item顺序即可。

//tv_background
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/shape_press" 
          android:state_pressed="true"></item>
    <item android:drawable="@drawable/shape_normal"></item>
</selector>

所以,建议每个Android程序员朋友,当使用selector的时候,尽量的把默认的item放在最后,这样就不会产生这样的问题了。

Selector中直接包含shape

很多小伙伴写一些背景圆角的按钮时候,并且有按住和释放时候的状态,往往要写一个selector xml和两个shape drawable xml文件,其实可以直接在selector包含shape,如下

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <item android:state_selected="true">
        <shape android:shape="rectangle">
            <corners android:topRightRadius="10dp"></corners>
            <solid android:color="@color/black_transparent_70"></solid>
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <corners android:topRightRadius="10dp"></corners>
            <solid android:color="@color/black_transparent_60"></solid>
        </shape>
    </item>
</selector>

Selector设置图像透明度

有时候产品需要在获取焦点,或者按住的时候设置图片的透明度,这个可以采用Selector加上bitmap标签即可实现:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <bitmap android:src="@drawable/ic_category_none" android:alpha="0.5"></bitmap>
    </item>
    <item android:drawable="@drawable/ic_category_none"></item>
</selector>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值