2011-08-13 30 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"