我在工作中发现:触碰模式下的listview项无法被选中,所谓选中,意思是点击选中该项后,背景长期高亮。在模拟器上测试时,可以使用鼠标滑轮滚动选中,这会调用onItemSelected()方法,在这里可以设置选中项高亮。
在真机上,由于没有滑轮,只能用手指点击选中,但是点击时,不会有选中后高亮的效果(注意:选中后高亮不是指点击选中那一下高亮,而是点击后长期高亮)。
或许你会想到使用selector背景选择器来设置:
- <?xml version="1.0" encoding="utf-8" ?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <!-- 默认时的背景图片-->
- <item android:drawable="@drawable/pic1" />
- <!-- 没有焦点时的背景图片-->
- <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" />
- </selector>
悲剧的是:我无法使用selector实现我想要的那种选中后长期高亮的状态问题出在哪呢? 首先要纠正的一点就是 默认时的背景一定要放在最后面要不然不同状态下的背景都不会显示了 只会显示默认的 。
- <!-- 默认时的背景图片-->
- <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