listview的选中项背景高亮

我在工作中发现:触碰模式下的listview项无法被选中,所谓选中,意思是点击选中该项后,背景长期高亮。在模拟器上测试时,可以使用鼠标滑轮滚动选中,这会调用onItemSelected()方法,在这里可以设置选中项高亮。

 在真机上,由于没有滑轮,只能用手指点击选中,但是点击时,不会有选中后高亮的效果(注意:选中后高亮不是指点击选中那一下高亮,而是点击后长期高亮)。

      或许你会想到使用selector背景选择器来设置:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
  3. <!-- 默认时的背景图片-->  
  4. <item android:drawable="@drawable/pic1" />  
  5. <!-- 没有焦点时的背景图片-->  
  6. <item android:state_window_focused="false" android:drawable="@drawable/pic1" />  
  7. <!-- 非触摸模式下获得焦点并单击时的背景图片-->  
  8. <item android:state_focused="true" android:state_pressed="true"  
  9. android:drawable="@drawable/pic2" />  
  10. <!-- 触摸模式下单击时的背景图片-->  
  11. <item android:state_focused="false" android:state_pressed="true"  
  12. android:drawable="@drawable/pic3" />  
  13. <!--选中时的图片背景-->  
  14. <item android:state_selected="true" android:drawable="@drawable/pic4" />  
  15. <!--获得焦点时的图片背景-->  
  16. <item android:state_focused="true" android:drawable="@drawable/pic5" />  
  17. </selector>  
悲剧的是:我无法使用selector实现我想要的那种选中后长期高亮的状态

问题出在哪呢? 首先要纠正的一点就是 默认时的背景一定要放在最后面要不然不同状态下的背景都不会显示了 只会显示默认的  。

  1. <!-- 默认时的背景图片-->  
  2. <item android:drawable="@drawable/pic1" /> 
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 没有焦点时的背景图片-->
<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" />
<!-- 默认时的背景图片-->
<item android:drawable="@drawable/pic1" />
</selector>

对于 上面提到的ListView高亮显示 我们只需这样做:
如果不是长久高亮显示 可以简单的这样
<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/selectedbg" />
</selector>
如果是长久高亮显示这样只有按下的时候高亮松开没有选中效果  ,android:state_selected="true" 在真机上不起作用(具体的我也不知道为什么)
<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/selectedbg" />
    <item android:state_selected="true" android:drawable="@drawable/app_list_corner_round" />
</selector>
我们只需要在这上面加个默认显示的就可以了 。
<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/selectedbg" />    
    <item  android:drawable="@drawable/app_list_corner_round" />
</selector>

总结下 想要高亮长久显示就加个默认显示
<item android:drawable="@drawable/app_list_corner_round" />的就可以 了
,不想长久高亮去掉这个就行。
如果是不需要 state_pressed="true"这种状态的时候就不需要用 selector来做了 直接在listview布局里面加
 android:listSelector="@drawable/selectedbg"或者代码cornerListView.setSelector(R.drawable.selectedbg);

如果上面所说的还不能满足的话 , 还有另外一种也可以在java代码中实现:比较好用的一种
下面的代码实现listview单选模式下点击后背景图片长期高亮 连接 :
http://blog.csdn.net/iamkila/article/details/7218351
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值