【问题标题】:Change ListView's text color on click单击时更改 ListView 的文本颜色
【发布时间】:2011-08-23 18:56:30
【问题描述】:

我有一个自定义的ListView,列表的每一行都由一个ImageView 和两个TextView 组成。我想在单击列表的项目时将文本的颜色更改为白色(仅在单击的项目中)。另外,我想在“未单击”项目时(释放“按下”时)将颜色改回黑色。当使用以下list_item_bg.xml 单击它时,我已经更改了该项目的背景颜色:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item 
    android:state_selected="false"
    android:state_pressed="false" 
    android:drawable="@color/white" />

<item android:state_pressed="true" 
    android:drawable="@color/red_destaques" />

<item android:state_selected="true"
    android:drawable="@color/red_destaques" />
</selector>

还有listitem_row.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/relativeLayout1"
    android:layout_width="fill_parent"
    android:layout_height="50dip"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="5dip"
    android:maxHeight="50dip"
    android:adjustViewBounds="true"
    android:background="@color/list_item_bg">

    <ImageView
        android:layout_width="70dip"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:adjustViewBounds="true"
        android:scaleType="fitStart" 
        android:src="@drawable/imagem_padrao_lista" 
        android:id="@+id/listItemLogo">
    </ImageView>

    <TextView
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:layout_width="wrap_content"
        android:layout_toRightOf="@+id/listItemLogo"
        android:layout_toLeftOf="@+id/listItemArrow"
        android:textColor="#000000"
        android:layout_marginLeft="5dip"
        android:adjustViewBounds="true" 
        android:id="@+id/listItemTitle">
    </TextView>

    <TextView
        android:layout_height="wrap_content"
        android:text="TextView"
        android:layout_width="wrap_content"
        android:layout_toRightOf="@+id/listItemLogo"
        android:layout_below="@+id/listItemTitle"
        android:textColor="#333333"
        android:layout_marginLeft="5dip"
        android:adjustViewBounds="true" 
        android:id="@+id/listItemDescription">
    </TextView>
    <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_alignParentRight="true" android:src="@drawable/setinha_navegacao" android:layout_centerVertical="true" android:id="@+id/listItemArrow"></ImageView>

</RelativeLayout>

我改变它的颜色的文本与上面的xmls中显示的背景改变的方式完全相同。如果可能的话,我宁愿通过代码来做这个改变......

【问题讨论】:

    标签: android listview customization


    【解决方案1】:

    像以前一样创建一个新的 StateListDrawable,但默认颜色为黑色,按下时为白色。

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="@color/black" />
    <item android:state_focused="true" android:color="@color/black" />
    <item android:state_pressed="true" android:color="@color/black" />
    <item android:color="@color/white" />
    </selector>
    

    现在在 TextView 中将文本颜色更改为新的可绘制对象:

    android:textColor="@color/list_item_text"
    

    更多关于 StateListDrawables:http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

    【讨论】:

    • 不工作 =/。当应用程序即将加载 ListView 时,我刚刚收到 ANR。我什至尝试将文本颜色设置为android:textColor="@color/list_item_bg",因为这个 xml 肯定可以工作,但我仍然收到错误消息 =/
    • 试试这个。我添加了一个专注的案例。
    • 现在它可以完美运行了!非常感谢!我认为它只会在触摸TextView 时改变颜色,但是当按下行的任何位置时它会改变(完全符合我的预期)。您知道任何可以更好地描述&lt;selector&gt; 行为方式的链接吗?我发现的只是肤浅的解释......
    • 为什么我输入的时候不提示android:color参数?
    • 我添加了一个链接...我不确定,它可能取决于保存 xml 文件的资源文件夹。所以如果你将它保存在 /color 那么它会建议 android :color 如果你将它保存在 /drawable 中,它会建议你使用 android:drawable?只是猜测
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多