Android中Selector的setSelected“方法不管用”

本文讲述了在Android开发中遇到的Selector设置selected状态无效的问题。作者分析了state_pressed和state_selected的使用场景,并指出两者的混淆可能导致问题。通过简化Selector的配置,实现了预期效果。文章总结了Selector的各个状态属性,帮助开发者更好地理解和使用。
摘要由CSDN通过智能技术生成

今天写一个用两个自定义的TextView控制ViewPager的时候,想实现点击TextView处于选中状态,

selector就选中<item>中的state_selected所对应的图片。

selector中按往常的习惯这样写的

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/icon_selfinfo_pressed" android:state_selected="true"  />
    <item android:drawable="@drawable/icon_selfinfo_pressed" android:state_pressed="true" />
    <item android:drawable="@drawable/icon_selfinfo_normal" />

</selector>
但是我在使用的时候设置tv.setSelected(true)的时候,始终只是按下一个状态,弹起恢复原来的状态,达不到我想要的selected状态。

分析了很多原因,有说按顺序从上到下选匹配的:

During each state change, the state list is traversed top to bottom and the first item that matches the current state will be used—the selection is not


based on the "best match," but simply the first item that meets the minimum criteria of the state.


但是我做过测试,如上讲selected状态放到最上面,但是还是没有setSeleted(true)的效果。估计还是匹配不了吧

估计在pressed和selected状态时候,我们点击匹配的都是pressed。


后面转换了下思想,没必要用state_pressed属性,直接这样写达到了目的:

<item android:drawable="@drawable/icon_selfinfo_pressed" android:state_selected="true"  />
<item android:drawable="@drawable/icon_selfinfo_normal" android:state_selected="false" />
<item android:drawable="@drawable/icon_selfinfo_normal" />


而且state_pressed和state_selected一起使用本身就觉得很奇怪,

到底是要pressed的点击一个状态,弹起呈现另一个状态,还是要selected的点击就一直选中状态?

归根到底两个一起使用不明确,我自己感觉意义也不大。



于是今天到此为止,总结下<selector>的用法就结束吧。



selector标签,这个标签是必要的标签,而且应当作为XML文件的根节点,在selector可以有一或多个item子标签
在selector标签中,我们可以配置以下几种属性:
            xmlns:android="http://schemas.android.com/apk/res/android"    这个是android的命名空间,默认这么写就可以
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android,`selector`是一个XML文件,用于定义不同状态下的视图样式。它可以应用于按钮、列表项、文本等视图元素,以根据不同的触摸或焦点状态显示不同的样式。 以下是使用`selector`属性的步骤: 1. 首先,在`res/drawable`目录下创建一个XML文件,例如`button_selector.xml`。 2. 在XML文件,使用`selector`元素作为根元素,并在其定义不同状态下的样式。例如,你可以定义按下状态(`state_pressed`)和默认状态(`state_default`)下的样式。 ```xml <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/button_pressed" /> <item android:state_default="true" android:drawable="@drawable/button_default" /> </selector> ``` 在上面的示例,`button_pressed`和`button_default`是指向其他drawable资源的引用,可以是颜色、形状或图片等。 3. 然后,在你的布局文件(XML)使用这个`selector`作为按钮的背景属性。例如,你可以使用`android:background`属性来指定按钮的背景。 ```xml <Button android:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="My Button" android:background="@drawable/button_selector" /> ``` 现在,当按钮处于按下状态时,它将显示`button_pressed`的样式;否则,它将显示`button_default`的样式。 `selector`属性不仅可以应用于按钮,还可以应用于其他视图元素,如TextView、ImageView等。你可以根据需要在`selector`定义更多的状态和样式。 希望这可以帮助到你!如有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值