2011-04-06 49 views

回答

14

我假設您使用的活動擴展了PreferenceActivity。您可以使用setTheme方法在首選項屏幕上設置自定義主題。 只需在res/values/themes.xml中定義一個。

它應該是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <style name="Theme.DarkText"> 
    <item name="android:textColor">#000000</item> 
    </style> 
</resources> 

然後把它在你的活動:

setTheme(R.style.Theme_DarkText); 
+0

如果您想在構建佈局之後更改文本顏色,該怎麼辦? – 2013-09-01 01:42:29

+0

@MarioB此代碼可以更改EditTextPreference之外的首選項的標題文本顏色。 EditTextPreference的標題(不是對話標題)的屬性名稱是什麼? – shantanu 2014-03-12 13:00:08

0

我把Udinic的想法,但我提高了一點。 現在可以在任何時候設置(在本例中)PreferenceCategory的顏色,而不僅僅是在膨脹視圖時。

如何做到這一點?

首先,創建自定義的類像這樣的:

import android.content.Context; 
import android.preference.PreferenceCategory; 
import android.util.AttributeSet; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class MyPreferenceCategory extends PreferenceCategory { 

private TextView categoryTitle; 

public PincardPreferenceCategory(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
} 

public PincardPreferenceCategory(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
} 

public PincardPreferenceCategory(Context context, AttributeSet attrs, 
     int defStyle) { 
    super(context, attrs, defStyle); 
    // TODO Auto-generated constructor stub 
} 


@Override 
protected View onCreateView(ViewGroup parent) { 
    categoryTitle = (TextView)super.onCreateView(parent); 
    return categoryTitle; 
} 


public void setBackgroundColor(int color) { 
    categoryTitle.setBackgroundColor(color); 
} 


public void setTextColor(int color) { 
    categoryTitle.setTextColor(color); 
} 

} 

一旦完成,你必須同時XML定義設置來使用它。

後,你只需要在你的java preferenceActivity使用這個循環:

for (int i = 0; i < getListView().getCount(); i++) { 
     Object view = getListView().getItemAtPosition(i); 
     if (view instanceof PincardPreferenceCategory) { 
      ((PincardPreferenceCategory)view).setBackgroundColor(Color.BLUE); 
      ((PincardPreferenceCategory)view).setTextColor(Color.RED); 
     } 
    } 

這裏的想法。您可以爲您的任何設置和任何時間做到這一點。 使用此代碼之前,佈局必須已完全加載,否則,getListView()。getCount()將返回0.如果您在onCreate中使用它,例如,我將無法工作。 如果你想在啓動時這樣做,我建議你在onWindowFocusChanged方法中這樣做。

+0

當屏幕可以放置更多項目時將不起作用,因爲ListView實現了視圖回收並且不會創建* all *視圖 – 2014-07-22 16:04:40