2012-11-22 431 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,實際上。 –

相關問題