改变listview中item选中时文字的颜色
摘要 当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 <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="http://schemas.android.com/apk/res/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="http://schemas.android.com/apk/res/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"?> <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的状态来变化,其实没加也不会有问题,因为默认状态本来就是能传递的,只是在某些极端的情况下可以设置这个属性做一层保险。
改变listview中item选中时文字的颜色的更多相关文章
- 转 Android RadioButton设置选中时文字和背景颜色同时改变
主要应用在购物车,像淘宝的那样,点击以后弹出一个选择种类颜色这样的popuwindow以后,然后这个选择种类的地方要用到类似这个玩意儿. 搜了一下,效果和这个文章一致.转了. 原文地址:http:// ...
- Android RadioButton设置选中时文字和背景颜色同时改变
主要应用在购物车,像淘宝的那样,点击以后弹出一个选择种类颜色这样的popuwindow以后,然后这个选择种类的地方要用到类似这个玩意儿. 搜了一下,效果和这个文章一致.转了. 原文地址:http:// ...
- Android ListView中Item点击事件失效解决方案
欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 在平常的开发过程中,我们的ListView可能不只是简单的显示下文本或者按钮,更多的是显示复杂的布局,这样的话,我们就得自己写布 ...
- android listview中item通过viewpager实现《IT蓝豹》
android listview中item通过viewpager实现 android listview中item通过viewpager实现,每一个item都支持viewpager实现图片切换功能.本项 ...
- 1016-06-首页20-封装工具条---UITableView控件距离顶部的间距问题----cell选中时的背景颜色设置
一.设置UITableView里面的顶部 cell 距离顶部的间距的三种方式: 方法 1. 直接设置: self.tableView.contentInset = UIEdgeInsetsMake(H ...
- Android 实现ListView中Item被单击后背景色保持高亮
今天为了解决一个需求,就是我有一个slidingDrawer,里面是一个ListView.然后,单击其中的Item,默认只是显示一个橙色背景后就恢复了.客户便有着个需求,需要单击这个Item的背景高亮 ...
- listview中item 有checkbox多选防止滑动 listview页面 出现checkbox错位问题
checkbox点击切换背景 <CheckBox android:id="@+id/checkbox" android:layout_width="40dp&quo ...
- Android购物车的实现,仿淘宝天猫京东等APP。处理RecyclerView或listview中的选中事件;
很久之前的代码了,拉出来晾晾! 购物车大致思路: 分为:商品.店铺.全选: 商品全部选中后--店铺自动选中:商品未全部选中(若有一个商品未选中)--店铺不选中. 店铺全部选中后--全选自动选中:店铺未 ...
- 自定义类似于listView中Item背景
方法一. drawable/listitem_bk.xml <?xml version="1.0" encoding="utf-8" ?> < ...
随机推荐
- Laravel5.1忽略Csrf验证的方法
在/App/Http/middleware/VerifyCsrfToken.php 文件的protected $except里面加入路由地址
- Python的支持工具[1] -> 可执行文件生成工具[1] -> cx_freeze
cx_freeze cx_Freeze 是一个第三方库,可以用于将 Python 的代码打包成可执行文件,下面介绍如何利用一个脚本文件将 Python 代码变为 exe 可执行文件. 首先,需要安装 ...
- 使用参数化SQL
Java.C#等语言提供了参数化SQL机制,使用参数化SQL开发人员为在运行时才能确定的参数值设置占位符,在执行的时候再指定这些占位符所代表的值.示例代码如下: string user=txtUser ...
- Mobius反演与积性函数前缀和演学习笔记 BZOJ 4176 Lucas的数论 SDOI 2015 约数个数和
下文中所有讨论都在数论函数范围内开展. 数论函数指的是定义域为正整数域, 且值域为复数域的函数. 数论意义下的和式处理技巧 因子 \[ \sum_{d | n} a_d = \sum_{d | n} ...
- C++ development cross platforms
1. target platforms: linux suse, windows server, both use vmware virtual machine on lab server. 2. c ...
- 三种Web前端框架比较与介绍--Vue, react, angular
一.Angular 1.MVVM(Model)(View)(View-model): 2.模块化(Module)控制器(Contoller)依赖注入: 3.双向数据绑定:界面的操作能实时反映到数据,数 ...
- 【Linux】Linux下 环境变量/etc/profile、/etc/bashrc、~/.bashrc的区别【转】
转自:http://blog.csdn.net/qiao1245/article/details/44650929 ------------------------------------------ ...
- frp -- proxy name [ssh] is already in use
- VBA 时间相关的函数
DateSerial DateADD Datediff http://www.yiibai.com/vba/vba_datediff_function.html https://www.techont ...
- Linux下查找、删除、替换命令
查看某目录下所有文件的个数: [root@localhost1 opt]# ls -l |grep "^-"|wc -l 查看某目录下所有文件的个数,包括子目录里面的: [root ...