изменение цвета фона метки категории предпочтений - PullRequest
3 голосов
/ 13 августа 2011

Я хотел бы изменить цвет предпочтительной категории 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"

Но это меняет цвет фона всей моей активности предпочтения.Каким образом я могу изменить атрибуты частей предпочтений?

Ответы [ 4 ]

7 голосов
/ 13 марта 2012

Для меня это работает:

Например, элемент 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

3 голосов
/ 13 августа 2011

Это решение моей проблемы. Например, в моем файле 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 голосов
/ 13 августа 2011

Я думаю, что проблема в том, что вы пытаетесь передать стиль / тему, для которой задан только цвет фона, когда он ожидает стиль / тему / макет, содержащий представление для замены текущего представления в предпочтении на .

Пример в документации для Android: widgetLayout говорит

флажок предпочтения будет указывать пользовательский макет (состоящий из только флажок) здесь

Другой вариант - попытаться сделать это в коде, переопределив onBindView () в PreferenceCategory.

и да, изменение темы в AndroidManfiest.xml должно изменить цвет фона (в данном случае) для всего Приложения или Действия в зависимости от того, где вы его указали.

0 голосов
/ 22 июля 2016

Другое решение, которое сработало для меня, это просто скопировать файл preference_category.xml в папку res / layout и изменить значения прямо оттуда.1004 * блок

...