摘要 当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选中时文字的颜色的更多相关文章

  1. 转 Android RadioButton设置选中时文字和背景颜色同时改变

    主要应用在购物车,像淘宝的那样,点击以后弹出一个选择种类颜色这样的popuwindow以后,然后这个选择种类的地方要用到类似这个玩意儿. 搜了一下,效果和这个文章一致.转了. 原文地址:http:// ...

  2. Android RadioButton设置选中时文字和背景颜色同时改变

    主要应用在购物车,像淘宝的那样,点击以后弹出一个选择种类颜色这样的popuwindow以后,然后这个选择种类的地方要用到类似这个玩意儿. 搜了一下,效果和这个文章一致.转了. 原文地址:http:// ...

  3. Android ListView中Item点击事件失效解决方案

    欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 在平常的开发过程中,我们的ListView可能不只是简单的显示下文本或者按钮,更多的是显示复杂的布局,这样的话,我们就得自己写布 ...

  4. android listview中item通过viewpager实现《IT蓝豹》

    android listview中item通过viewpager实现 android listview中item通过viewpager实现,每一个item都支持viewpager实现图片切换功能.本项 ...

  5. 1016-06-首页20-封装工具条---UITableView控件距离顶部的间距问题----cell选中时的背景颜色设置

    一.设置UITableView里面的顶部 cell 距离顶部的间距的三种方式: 方法 1. 直接设置: self.tableView.contentInset = UIEdgeInsetsMake(H ...

  6. Android 实现ListView中Item被单击后背景色保持高亮

    今天为了解决一个需求,就是我有一个slidingDrawer,里面是一个ListView.然后,单击其中的Item,默认只是显示一个橙色背景后就恢复了.客户便有着个需求,需要单击这个Item的背景高亮 ...

  7. listview中item 有checkbox多选防止滑动 listview页面 出现checkbox错位问题

    checkbox点击切换背景 <CheckBox android:id="@+id/checkbox" android:layout_width="40dp&quo ...

  8. Android购物车的实现,仿淘宝天猫京东等APP。处理RecyclerView或listview中的选中事件;

    很久之前的代码了,拉出来晾晾! 购物车大致思路: 分为:商品.店铺.全选: 商品全部选中后--店铺自动选中:商品未全部选中(若有一个商品未选中)--店铺不选中. 店铺全部选中后--全选自动选中:店铺未 ...

  9. 自定义类似于listView中Item背景

    方法一. drawable/listitem_bk.xml <?xml version="1.0" encoding="utf-8" ?> < ...

随机推荐

  1. springBoot Feign

    1.引入依赖包 <!-- 引入关于 eureka-server的依赖 --> <dependency> <groupId>org.springframework.c ...

  2. laravel按月/时间区间查询数据

    public function payRollList($time) { $member_phone = Session::get(phone'); $engineer = Engineer::get ...

  3. 解析 Lambda 表达式

    我们先创建一个表达式树: Expression<Func<int, int, int>> expression = (a,b) => a + b; 我们的例子是一个Exp ...

  4. Ansible 删除多个文件或目录

    翻译和转载该网页内容 http://www.mydailytutorials.com/ansible-delete-multiple-files-directories-ansible/ 背景 ans ...

  5. 洛谷 ——2925干草出售Hay For Sale

    题目描述 Farmer John suffered a terrible loss when giant Australian cockroaches ate the entirety of his ...

  6. 【bzoj3687】【简单题】bitset

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=64333782 这次的图是自己画的,方便的话点个赞 ...

  7. python全栈开发- day14列表推导式、生成器表达式、模块基础

    一.列表推导式 #1.示例 数据量小 egg_list=[] for i in range(10): egg_list.append('鸡蛋%s' %i) egg_list=['鸡蛋%s' %i fo ...

  8. cf 546C Soldier and Cards

    题目链接:C. Soldier and Cards Two bored soldiers are playing card war. Their card deck consists of exact ...

  9. JavaSript模块规范 - AMD规范与CMD规范介绍 (转)

    JavaSript模块化   在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发?       模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题 ...

  10. command for ContextMenu in DataTemplate

    准备教程. 1. 无难度方式 <DataTemplate x:Key="DataTemplate1"> <StackPanel  > <toolkit ...