2012-11-22 391 views
8

每个ListView项目中都有一个TextView,我通过自定义适配器进行设置。 TextView XML不在ListView XML写入的同一文件中,我希望当任何ListView项被选中时,该特定项的字体颜色应该改变。我还试图通过定义TextView的不同状态,即选择,聚焦和按下,但这不能解决我的问题。请为我提供一些解决方案。这里是摘录..当选择ListView项目时,更改TextView的字体颜色

在一个xml文件中侦听例如。 file1.xml

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

并在不同的XML一个TextView ..即file2.xml

<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 /彩色文件夹即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"/> 

+0

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

回答

8

下面片断会帮助你。

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我试过了,它帮助某个地方改变了它被点击的特定项目的字体颜色,但现在我想要它应该保留原来的颜色,一旦点击从该特定位置消失。你能以这种方式帮助我吗?谢谢。 –

+0

我有同样的问题。 –

+1

以及如何在不点击的情况下更改TextView的颜色,例如创建ListView时。 – Naskov

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 guide没有提到state_activated属性,但它为我工作。

+1

这是正确的答案 – AndrewS

+0

'android:state_activated'绝对是你想要的。为什么这个不记录是疯狂的。我花了大约30分钟试图让这个工作,然后我尝试了这一点,它的工作原理。 –

+0

这是可能的图像也,我想切换两个图像,我试图而不是android:彩色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" 
    /> 

而在红色我的检查项目后,我按他们。只有一个检查项目。请享用!

+0

其工作正常。做得好!! +1。谢谢:) – jagdish

+0

伟大的代码!! + 1 :))) –

+0

在listview中选择元素的情况下,应该接受这个答案。好的回答@Master,实际上。 –

相关问题