改变listview中item选中时文字的颜色

当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="http://schemas.android.com/apk/res/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=
"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"?>

<selector
xmlns:android=
"http://schemas.android.com/apk/res/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的状态来变化,其实没加也不会有问题,因为默认状态本来就是能传递的,只是在某些极端的情况下可以设置这个属性做一层保险。

改变listview中item选中时文字的颜色,布布扣,bubuko.com

时间: 2024-12-23 00:20:21

改变listview中item选中时文字的颜色的相关文章

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

主要应用在购物车,像淘宝的那样,点击以后弹出一个选择种类颜色这样的popuwindow以后,然后这个选择种类的地方要用到类似这个玩意儿. 搜了一下,效果和这个文章一致.转了. 原文地址:http://blog.csdn.net/liuwan1992/article/details/52688408 在使用 RadioButton 时,有时我们会想要达到选中时文字颜色和背景颜色同时改变的效果,这里还需要多进行几步操作. 首先,在布局文件中新建一组 RadioButton : [html] view

奇葩问题:ListView中Item与Item中的Button不能单击问题

android中ListView是一个经常要用到的一个组件,用到该组件时经常会碰到ListView的Item和Item中的Button不能单击的问题. 本人在使用时同样也遇到过这样的情况,共有三种情况,总结如下: 情况一:焦点问题: 设置android:descendantFocusability="blocksDescendants"> 和android:focusable="false" 该情况比较常见,在网上都可以搜索到相关的解决办法,不在这过多的介绍,

【Android进阶】关于ListView中item与控件抢夺焦点的那些事

在开发中,listview可以说是我们使用最频繁的控件之一了,但是关于listview的各种问题也是很多.当我们使用自定义布局的Listview的时候,如果在item的布局文件里面存在Button或者是CheckBox等控件以及其子类控件的时候,经常会碰到各种控件的点击事件冲突的情况,那么我们如何来处理Listview中这种控件之间焦点冲突的情况呢? 我们以item存在一个Button控件为例 首先,加入我们不设置任何关于焦点的属性,比如focus等,代码如下 @Override public

android 修改listview中adapter数据时抛出异常java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification问题

近日在做项目时遇到非必现crush,具体异常信息为: // Short Msg: java.lang.IllegalStateException // Long Msg: java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not mo

listview中item的各种进入乱入效果实现

今天给大家带来的,是使用开源项目ListviewAnimation(此项目在Github上已经停止维护),来实现listview控件中,item的各种进入效果,包括左侧进入,右侧进入,下侧进入,右下角进入,放大进入.卡片样式等效果. 废话不多说,先上效果图. 卡片效果 底部进入 右侧进入 左侧进入 右下角进入 放大进入 因为这个代码确实没什么讲头,也没什么难度,我直接上传代码,大家自己看吧 点击下载源码 listview中item的各种进入乱入效果实现

android listview中item通过viewpager实现

android listview中item通过viewpager实现 android listview中item通过viewpager实现,每一个item都支持viewpager实现图片切换功能.本项目主要介绍多个viewpager加载图片和listview 上下滑动不卡顿问题.本项目由作者Flyco分享的分享地址:https://github.com/H07000223/FlycoBanner_Master.本项目找对应id封装一个ViewFindUtils类,通过如下代码找id    /**

改变Label中不同位置的字的颜色

? 1 2 3 4 5 6 //取出想要变得字符串在大字符串的什么地方     NSRange changeRange = [chapterStr rangeOfString:totalImg];     //字显示不同的颜色     NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc]initWithString:chapterStr];     [attributedStr addAttri

自定义类似于listView中Item背景

方法一. drawable/listitem_bk.xml Xml代码   <?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 没有焦点时的背景图片 --> <item android:state_window_focused=&

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

checkbox点击切换背景 <CheckBox android:id="@+id/checkbox" android:layout_width="40dp" android:layout_height="40dp" android:button="@null" android:focusable="false" android:background="@drawable/playimage