当ListView项目被选中时,更改TextView的字体颜色

8

每个 ListView Item 中都有一个 TextView,我通过自定义适配器设置它。TextView XML 不在写有 ListView XML 的同一文件中,我希望当 ListView 的任何 Item 被选中时,该特定 Item 的字体颜色应更改。我还尝试通过定义 TextView 的不同状态,即选定、聚焦和按下状态来解决问题,但这并没有解决我的问题。请给我提供一些解决方案。以下是代码片段。

在一个 XML 文件(例如 file1.xml)中有一个 ListView。

<ListView
    android:id="@+id/listView1"
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="0.5"
    android:clickable="true" />

在不同的xml文件中,比如file2.xml中有一个TextView。
<TextView
    android:id="@+id/rowListTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingBottom="10dp"
    android:paddingLeft="10dp"
    android:paddingTop="10dp"
    android:text="@string/app_name"
    android:textColor="@color/file3"
    android:textSize="10sp"
    android:textStyle="bold" />  

在res/color文件夹中有一个用于文本颜色属性的文件,即file3.xml。
<item android:state_selected="true" android:color="@android:color/white"/>
<item android:state_focused="true"  android:color="@android:color/white"/>
<item android:state_pressed="true"  android:color="@android:color/white"/>
<item android:color="@android:color/black"/>


teerapap的回答是最好的答案 - 我认为它必须被接受。 - AndrewS
3个回答

22

尝试使用这个颜色状态列表来设置textColor。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#fff"/>
    <item android:state_activated="true" android:color="#fff"/>
    <item android:color="#000" />
</selector>

Android指南没有提及state_activated属性,但对我有效。


android:state_activated 绝对是你想要的。为什么这个东西没有被记录下来真是太疯狂了。我花了大约30分钟尝试让它工作,然后我尝试了这个,它起作用了。 - Christopher Perry
这对图片也适用吗?我想在两张图片之间切换,我尝试将android:color替换为图片的android:src,但出现了错误。 - Lion789

14

在选择器中:

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
    <item  android:state_activated="true"  android:color="#ff0000" />
    <item android:state_active="true" android:color="#ff0000" />  
    <item android:state_pressed="true" android:color="#ff0000" />
    <item android:state_selected="true" android:color="#ff0000" />
    <item android:state_focused="true" android:color="#ff0000" />
    <item android:color="#000000" />
</selector>
在活动中:myListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
public void onItemClick(AdapterView<?> parent, View view,
                      int position, long id) {
                     pl=position;
                     myListView.setItemChecked(pl, true);
                     adapter.notifyDataSetChanged();
                          .....

item.xml:

<?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:textColor="@drawable/selector"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
    />

当我点击选项时,它们会变成红色。只能选择一项。享受吧!


在ListView中进行元素选择时,这应该是被接受的答案。非常好的回答@Master。 - Alok Vishwakarma

7
以下代码片段将对您有所帮助。
listView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView <? > adapterView, View rowView,
    int position, long id) {
        TextView textView = (TextView) rowView.findViewById(R.id.rowListTextView);

        textView.setTextColor("Desired Color");

    }
});

我没有包括当您滚动列表时保留文本颜色并且所选项目失去焦点的情况。这个片段将引导您朝着正确的方向。


1
谢谢Vipul,我尝试了它并且在某种程度上有所帮助,因为它正在更改被点击的特定项目的字体颜色,但现在我想要它在点击从特定位置消失后保留原始颜色。你能帮我吗?谢谢。 - Nitin Bathija
1
如何在不点击的情况下更改TextView的颜色,例如当创建ListView时。 - Naskov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接