博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
改变listview中item选中时文字的颜色
阅读量:5316 次
发布时间:2019-06-14

本文共 2796 字,大约阅读时间需要 9 分钟。

摘要 当listview的某个item选中时,默认有个选中的高亮显示,如果你要自定义选中时的高亮显示效果,可以在listview中设置属性 android:listSelector="@drawable/item_selector" 其中 item_selector 是在drawable目录下定义的一个xml文件,这种用于突出不同状态下

   当listview的某个item选中时,默认有个选中的高亮显示,如果你要自定义选中时的高亮显示效果,可以在listview中设置属性

1
android:listSelector=
"@drawable/item_selector"

   其中item_selector是在drawable目录下定义的一个xml文件,这种用于突出不同状态下显示效果的xml文件我们称之为selector:

1
2
3
4
5
6
7
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<selector
  
xmlns:android=
""
>
    
<item android:state_pressed=
"false"
android:drawable=
"@*android:color/transparent"
/>
    
<item android:state_pressed=
"true"
android:drawable=
"@drawable/grid_item_select_bg"
/>
    
<item android:state_selected=
"true"
android:drawable=
"@drawable/grid_item_select_bg_night"
/>
</selector>

   上面这个selector定义了三种状态下的显示效果。

   但是如果我们想在listview的某个item选中时改变该item的某个textview的文字颜色,上面的办法就行不通了。那该如何做呢?

   其实如果我们真正了解android:listSelector的含义的话,很容易实现上面的需求。

   我发现如果不在listview中设置listSelector,也就是将android:listSelector="@drawable/item_selector"去掉,而把item 的background属性设为item_selector,会得到同样的选中高亮效果。由此可见listview可以将自己的状态(state_press、state_select、state_focus等)向内传递,当然item本身也可以将这些状态继续传递给子view。

   受此启发,我们可以将需要高亮显示文字颜色的TextView的textColor属性也设置成selector的形式(没想到吧textColor也可以用drawable定义)。

   假设item的xml原本定义为

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<LinearLayout xmlns:android=
""
    
android:layout_width=
"fill_parent"
    
android:layout_height=
"fill_parent"
    
android:orientation=
"vertical"               
    
>
    
<TextView
        
android:id=
"@+id/txt"
        
android:layout_width=
"fill_parent"
        
android:layout_height=
"wrap_content"
        
android:text=
"@string/hello"
        
android:layout_margin=
"5dp"        
        
/>
</LinearLayout>

   那么可以按照上面的办法将item的xml改写为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<LinearLayout xmlns:android=
""
    
android:layout_width=
"fill_parent"
    
android:layout_height=
"fill_parent"
    
android:orientation=
"vertical"
    
android:background=
"@drawable/item_selector"
<!-- item背景色变换 -->
    
>
    
<TextView
        
android:id=
"@+id/txt"
        
android:layout_width=
"fill_parent"
        
android:layout_height=
"wrap_content"
        
android:text=
"@string/hello"
        
android:layout_margin=
"5dp"
       
android:textColor=
"@drawable/item_text_selector"
<!-- item文字颜色变换 -->
        
/>
</LinearLayout>

   其中,item_text_selector.xml的源码如下:

1
2
3
4
5
6
7
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<selector xmlns:android=
""
>
    
<item android:state_focused=
"true"
android:color=
"#333333"
/> <!-- focused -->
    
<item android:state_pressed=
"true"
android:color=
"#333333"
/> <!-- pressed -->
    
<item android:state_selected=
"true"
android:color=
"#333333"
/> <!-- pressed -->
    
<item android:color=
"#f4f4f4"
/> <!--
default
-->
</selector>

   经过本人实际测试该方法可行,如果想更加可靠不妨给TextView 增加个属性

1
android:duplicateParentState=
"true"

表示会跟随ParentView的状态来变化,其实没加也不会有问题,因为默认状态本来就是能传递的,只是在某些极端的情况下可以设置这个属性做一层保险。

转载于:https://www.cnblogs.com/xgjblog/p/4228691.html

你可能感兴趣的文章
css文本溢出显示省略号
查看>>
git安装和简单配置
查看>>
面向对象:反射,双下方法
查看>>
鼠标悬停提示文本消息最简单的做法
查看>>
Java面向对象重要关键字
查看>>
课后作业-阅读任务-阅读提问-2
查看>>
面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序...
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
Awesome Adb——一份超全超详细的 ADB 用法大全
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
Android 将drawable下的图片转换成bitmap、Drawable
查看>>
介绍Win7 win8 上Java环境的配置
查看>>
移动、联通和电信,哪家的宽带好,看完你就知道该怎么选了!
查看>>
Linux设置环境变量的方法
查看>>
Atitit.进程管理常用api
查看>>
构建自己的项目管理方案
查看>>
利用pca分析fmri的生理噪声
查看>>
div水平居中且垂直居中
查看>>
怎么在windows7系统我的电脑中添加快捷方式
查看>>
epoll使用具体解释(精髓)
查看>>