在选择时更改Android ListView文本的文本颜色

时间:2012-01-24 12:27:29

标签: android listview user-interface

我无法弄清楚我做错了什么......

我有一个带有自定义layout.xml文件的ListView。在那里,我定义了像这样的TextView

<TextView android:layout_height="wrap_content" 
          android:layout_width="wrap_content"
          android:text="foo"
          android:textColor="@drawable/listitem_textcolor_selector"/>

listitem_textcolor_selector.xml看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <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>

这种作品。如果我选择一行,它会正确地将文本的颜色更改为红色。唯一的问题是,它不会保持红色。 大约一秒后,该颜色会变回黑色。

这里的主要问题是行的背景将改变它的颜色并且这种颜色将保留,但文本的颜色不会,即使列表项本身的选择器看起来相同(期望颜色)。

有人可以告诉我我错过了什么吗? 任何帮助表示赞赏,因为我不知道如何解决这个问题:)

由于

修改: 也许我还应该指出我正在测试三星Galaxy Tab 10.1平板电脑。我曾经听过一些关于“TouchMode”的事情而不知道天气这会与我的问题有关......

4 个答案:

答案 0 :(得分:9)

在listitem_textcolor_selector.xml中添加以下状态:

        <!-- Activated -->      
<item 
    android:state_activated="true" 
    android:color="#ff0000" />

        <!-- Active -->      
<item 
    android:state_active="true" 
    android:color="#ff0000" />  

在此之后,所选项目将保持其颜色状态,直到选择其他内容。

希望这会有所帮助。

答案 1 :(得分:4)

我赢了这个问题! 在选择器中:

    <?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"
    />

点击后我的选中项目为红色。只有一个检查项目。享受!

答案 2 :(得分:1)

我得到了诀窍。如果您为列表项使用自定义xml,则可以更改文本颜色,如:

<强> custom_listitem:

<?xml version="1.0" encoding="utf-8"?>     
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="10dip"
        android:paddingRight="10dip"
        android:paddingTop="7dip"
        android:paddingBottom="7dip"
        android:textSize="18sp"
        android:textStyle="bold"
        android:textColor="@drawable/listitem_textcolor_selector"
         />

现在您必须将此xml名称用于您用于填充列表视图的数组适配器。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.custom_listitem, options);
listView.setAdapter(adapter);

答案 3 :(得分:0)

listitem_textcolor_selector.xml保存在color folder of your res中,然后像这样使用它:android:textColor="@color/listitem_textcolor_selector"