2011-03-23 212 views
1

我有一個簡單的ListView,它是使用Array Adapter和ArrayList創建的;更改ListView中的文本顏色

無論如何要訪問列表視圖中的某一行,然後更改列表視圖中該行所在的文本視圖的文本顏色?

我知道如何改變一個TextView的文本顏色,但我訪問文本視圖是列表視圖

回答

12

如果您查看simple_list_item_1的源代碼,您會發現它只是一個TextView。源代碼位於:

<sdk-dir>/platforms/<your-platform>/data/res/layout/simple_list_item_1 

ArrayAdapter超類將在其getView方法中返回該TextView。這意味着你可以繼承ArrayAdapter的子類,並且在你的子類的getView方法中,你可以簡單地鏈接到超類,將它返回到TextView並執行你的操作。例如,如果你想在你的列表中的前三個項目設置爲TEXTSIZE 24,其餘的14,你可以做到以下幾點:

public View getView(int position, View convertView, ViewGroup parent) { 
    TextView tv = (TextView) super.getView(position, convertView, parent); 

    if (position < 3) { 
    tv.setTextSize(24.0f); 
    } else { 
    tv.setTextSize(14.0f); 
    } 
    return tv; 
} 

如果您使用的是simple_list_item_1管理更復雜的搜索,你可以通過檢查源代碼來找出View上元素的id,然後在由超類返回的View上調用findViewById。例如,two_line_list_item.xml擁有的android.R.id.text1android.R.id.text2 IDS TextViews,所以你應該能夠得到他們把手如下:

public View getView(int position, View convertView, ViewGroup parent) { 
    View v = super.getView(position, convertView, parent); 
    TextView tv1 = (TextView)v.findViewById(android.R.id.text1); 
    TextView tv2 = (TextView)v.findViewById(android.R.id.text2); 

    //do what you want with the TextViews 
} 
1

通過自定義列表項的內部有問題,在你的適配器getView方法,你可以改變通過調用findViewById(R.id.myText)然後調用setTextColor可輕鬆獲得文本顏色。實際上,您可以使用內置的列表項來執行此操作,您只需要知道TextView的ID ...我不會徒手,但您應該能夠輕鬆找到它。

如果您使用的是標準ListView項目,若要在XML中更改它,請參閱Applying Styles and Themes以更改文本顏色。

+0

那麼有沒有辦法做到這一點在Java文件?我將根據一些輸入值動態更改它 – au789 2011-03-23 01:25:34

+0

使用自定義列表項,在適配器'getView'方法中,您可以通過調用'findViewById(R.id.myText)'方便地更改文本顏色,然後調用'setTextColor '。實際上,您可以使用內置的列表項來完成此操作,您只需要知道TextView的'ID'即可。 – 2011-03-23 01:29:36

+0

所以你說這是不可能的數組列表和陣列適配器。如果我想實現結果,我需要製作一個自定義列表項目? – au789 2011-03-23 01:32:05