2011-08-13 29 views
3

我想更改偏好類別bakcgorund的顏色。在我的XML與喜好我有這樣類型的類別:更改偏好類別標籤顏色背景

<PreferenceCategory android:title="Synchronization"> ... </PreferenceCategory> 

我試圖用XML屬性來更改背景:

android:widgetLayout="@style/PreferenceCategory" 

而在我的styles.xml代碼如下:

<resources> 
<style name="PreferenceCategory"> 
    <item name="android:background">@color/my_blue</item> 
</style> 
</resources> 

但它不能正常工作。我有致命異常:

08-13 01:43:09.111: WARN/dalvikvm(1329): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329): FATAL EXCEPTION: main 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329): android.content.res.Resources$NotFoundException: Resource ID #0x7f090006 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.content.res.Resources.getValue(Resources.java:892) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.content.res.Resources.loadXmlResourceParser(Resources.java:1869) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.content.res.Resources.getLayout(Resources.java:731) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.view.LayoutInflater.inflate(LayoutInflater.java:318) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.preference.Preference.onCreateView(Preference.java:416) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.preference.Preference.getView(Preference.java:389) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.preference.PreferenceGroupAdapter.getView(PreferenceGroupAdapter.java:221) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.widget.AbsListView.obtainView(AbsListView.java:1418) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.widget.ListView.makeAndAddView(ListView.java:1745) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.widget.ListView.fillDown(ListView.java:670) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.widget.ListView.fillFromTop(ListView.java:727) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.widget.ListView.layoutChildren(ListView.java:1598) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.widget.AbsListView.onLayout(AbsListView.java:1248) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.view.View.layout(View.java:7175) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.widget.RelativeLayout.onLayout(RelativeLayout.java:912) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.view.View.layout(View.java:7175) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.view.View.layout(View.java:7175) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.view.View.layout(View.java:7175) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1140) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.os.Looper.loop(Looper.java:123) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at android.app.ActivityThread.main(ActivityThread.java:3647) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at java.lang.reflect.Method.invoke(Method.java:507) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
08-13 01:43:09.141: ERROR/AndroidRuntime(1329):  at dalvik.system.NativeStart.main(Native Method) 

我有同樣的致命異常,當我改變顏色的形式@color/my_blue一些十六進制代碼。

我知道我可以在AndroidManifest用我的偏好活動這個XML屬性:

android:theme="@style/PreferencesTheme" 

但它改變了我所有的喜好活動的背景色。我可以通過哪種方式更改偏好設置部件的屬性?

+0

您可以張貼在logcat的這個完整的錯誤日誌是什麼? –

+0

我編輯了我的問題併發布了完整的錯誤日誌。 – woyaru

回答

2

我認爲問題在於,當您想要傳遞只包含指定背景色的樣式/主題時,它需要包含視圖的樣式/主題/佈局來替換首選項中的當前視圖用。

爲Android文檔中的例子:widgetLayout說

複選框喜好將指定一個自定義佈局(包括 只是複選框)這裏

另一種辦法是嘗試通過重寫PreferenceCategory的onBindView()來在代碼中執行此操作。

是的,更改AndroidManfiest.xml中的主題應根據您指定的位置更改整個應用程序或活動的背景顏色(在本例中)。

+0

是的,我必須寫一個簡單的佈局。使用資源和項目會導致問題。我已經發布瞭解決我的問題的解決方案。 – woyaru

3

這是我的問題的解決方案。在我的文件例如preference_category.xml中,我必須爲PreferenceCategory設置一個簡單的佈局,並在android:layout中使用它。但是android:widgetLayout不起作用。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@color/my_blue" 
> 
<TextView 
android:id="@+android:id/title" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:textColor="@color/my_white" 
android:textStyle="bold" 
android:textSize="16sp" 
android:padding="5dp" 
android:layout_marginLeft="10dp" 
/>  
</LinearLayout> 
+0

我走了相同的路徑,發現一些資源被隱藏,無法設置樣式。提供佈局的方法工作,而widgetLayout將引用列表項中的視圖,例如複選框或其他窗口小部件。 – GregM

7

對我來說,這個工程:

例如ListSeparator項目:

在styles.xml

<style name="ListSeparator"> 
<item name="android:background">@drawable/status_bar</item> 
<item name="android:layout_width">match_parent</item> 
<item name="android:layout_height">25dip</item> 
<item name="android:textStyle">bold</item> 
<item name="android:textColor">@color/black</item> 
<item name="android:textSize">14sp</item> 
<item name="android:gravity">center_vertical</item> 
<item name="android:paddingLeft">5sp</item> 
</style> 

<color name="custom_theme_color">#e6e6e6</color> 

<style name="CustomTheme" parent="android:Theme.Light.NoTitleBar"> 
<item name="android:windowBackground">@color/custom_theme_color</item> 
<item name="android:colorBackground">@color/custom_theme_color</item> 
<item name="android:listSeparatorTextViewStyle">@style/ListSeparator</item> 
</style> 

然後,在AndroidManifest。XML:

<activity 
android:name="MyActivityPreference" 
android:theme="@style/CustomTheme" > 
</activity> 

或查看這個線程: https://stackoverflow.com/a/5564943/471690

0

另一種解決方案是爲我工作只是複製preference_category.xml到RES /佈局文件夾,右鍵從那裏更改值。

<?xml version="1.0" encoding="utf-8"?> 
    <!-- Layout used for PreferenceCategory in a PreferenceActivity. --> 
    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     style="?android:attr/listSeparatorTextViewStyle" 
     android:textColor="@color/colorPrimaryDark" 
     android:id="@android:id/title" 
     /> 

只要給過顏色,你想在android:textColor="@color/colorPrimaryDark"