2011-07-13 82 views
4

我有在個別項目中custom_row_views.xml定義列表視圖:如何動態更改我的列表視圖項目的textColor?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <TextView android:id="@+id/showtitle" 
    android:textSize="17sp" 
    android:textStyle="bold" 
    android:textColor="#FFFF00" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 
<TextView android:id="@+id/showdate" 
    android:textSize="14sp" 
    android:textStyle="italic" 
    android:textColor="#CCCCCC" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 
<TextView android:id="@+id/showsummary" 
    android:textSize="17sp" 
    android:textStyle="normal" 
    android:textColor="#FFFFFF" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 
</LinearLayout> 

注意,三個textviews有不同的文本顏色。

現在,根據偏好設置,用戶應該改變文本視圖項目的文本顏色。

基本上,我看到兩種方式來做到這一點。一種是使用一個主題:

<resources> 
    <style name="ThemeBlack" parent="@android:style/Theme"> 
    <item name="android:textColor">#FFFFFF</item> 
    <item name="android:typeface">sans</item> 
    <item name="android:background">#999999</item> 
    <item name="android:textSize">16sp</item> 
    </style> 
    <style name="ThemeRed" parent="@android:style/Theme"> 
    <item name="android:textColor">#0000FF</item> 
    <item name="android:typeface">sans</item> 
    <item name="android:background">#c81111</item> 
    <item name="android:textSize">16sp</item> 
    </style> 
</resources> 

,然後在的onCreate()例如:

this.setTheme(R.style.ThemeRed); 

這裏的問題是,它改變了所有的textviews'文本顏色,無論是在樣式定義。換句話說,它們不再是不同的。所以我的第一個具體問題是:

是否有可能以某種方式定義或應用樣式,以便迎合包含三個單獨顏色文本瀏覽的listview?

另一種方法是通過編程方式設置文本顏色,而不是使用樣式和主題。這是我的第一個方法,我認爲這很容易,但我已經掙扎了好幾個小時而無濟於事。

我試圖在ListActivity的OnCreate如下:

TextView tv = (TextView) findViewById(R.id.showsummary); 
tv.setTextColor(Color.RED); 

但是,使應用程序崩潰。

然後我嘗試這樣的:

TextView tv = null; 
LayoutInflater inflater = this.getLayoutInflater(); 
View aView = inflater.inflate(R.layout.custom_row_view, null); 
tv = (TextView) aView.findViewById(R.id.showsummary); 
tv.setTextColor(Color.RED); 

它不會崩潰,但它也不管用!

所以我的第二個問題是:

如何更改代碼我的列表視圖項目的文本顏色?

請注意,所有的listview項目應該有新的顏色;重要的是裏面的三個單獨的文字瀏覽這些項目應該單獨着色。換句話說,我並不是試圖在列表視圖中設置單個項目的顏色。

UPDATE: 我不知道這有什麼差別,但是這是列表視圖是如何popuplated:

Cursor showsCursor = mDbHelper.fetchSummaries(mCategory); 
String[] from = new String[]{C2CDbAdapter.SUMMARY_TITLE, C2CDbAdapter.SUMMARY_DATE, C2CDbAdapter.SUMMARY_SUMMARY}; 
int[] to = new int[]{R.id.showtitle, R.id.showdate, R.id.showsummary}; 
SimpleCursorAdapter shows = new SimpleCursorAdapter(this, R.layout.custom_row_view, showsCursor, from, to); 
setListAdapter(shows); 

回答

5

經過大量的搜索和反覆試驗,我發現了一個非常簡單的解決方案。此示例通過創建匿名方法覆蓋適配器的getView方法,但當然也可以基於SimpleCursorAdapter聲明新類並在setListAdapter中使用該類。

setListAdapter(new SimpleCursorAdapter(this, R.layout.custom_row_view, showsCursor, from, to) { 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
       View row = super.getView(position, convertView, parent); 
       // Here we get the textview and set the color 
       TextView tv = (TextView) row.findViewById(R.id.showsummary); 
       tv.setTextColor(Color.YELLOW); 
       return row; 
     } 
}); 

與匿名方法的好處是,它可以在任何適配器上,您無需繼承特定的類中使用。

我的編碼在這個博客帖子的靈感:http://sudarmuthu.com/blog/using-arrayadapter-and-listview-in-android-applications

0

嘗試將標籤設置爲您的TextView,然後找到它標籤,最後使用方法設置顏色setTextColor(Color.RED);

+0

如何找到標籤的看法? – marlar

+0

有一個方法可以讓你做到這一點:她的名字是:'findViewByTag();' – Houcine

+0

你的意思是findViewWithTag()?我試過了,但是這種方法也沒用。但是,我找到了解決辦法,明天我會發布答案。現在是深夜,我需要睡覺:) – marlar

1

這是你在問什麼?

setContentView(R.layout.main); 
    TextView messageText = (TextView) findViewById(R.id.mainTextItem1); 
    messageText.setText("This is a test"); 
    messageText.setTextColor(Color.RED); 

XML世界的開始:

您可以用switch語句選擇顏色。顏色是int型。

int myColor = 0xffff0000; //這是紅色

int myColor = Color.RED; //這也是這樣。

messageText.setTextColor(myColor); //現在用戶可以選擇一種顏色

+0

謝謝,但那不是我想要的。在想要更改列表視圖項目的顏色,例如在我的具體情況下R.id.showsummary。 – marlar

+1

網上有一篇文章詳細介紹瞭如何爲每個ListView條目顯示不同的顏色。也許這就是你想要的。該網址是http://dustinbreese.blogspot.com/2009/12/creating-listview-with-alternating.html –

+0

當您寫這篇文章時,我發佈了自己的答案。中心思想大致相同,即重寫getView,然後調用super.getView()並在返回之前修改視圖。我給你+1這個! – marlar

相關問題