我想更改首选项类别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 :(得分: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>
答案 1 :(得分: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>
答案 2 :(得分:2)
我认为问题在于,当您期望包含视图的样式/主题/布局替换首选项中的当前视图时,您尝试传递仅具有指定背景颜色的样式/主题。
android:widgetLayout文档中的示例说
复选框首选项将指定自定义布局(由...组成) 只是CheckBox)这里
另一种选择是通过覆盖PreferenceCategory的onBindView()来尝试在代码中执行此操作。
是的,更改AndroidManfiest.xml中的主题应根据您指定的位置更改整个Application或Activity的背景颜色(在本例中)。
答案 3 :(得分:0)
另一个对我有用的解决方案就是将preference_category.xml复制到res / layout文件夹并从那里更改值。
<?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"
块