如何将主题应用于<PreferenceCategory>的<PreferenceScreen>元素

Vik*_*ngh 5 android preferenceactivity

我有一个扩展PreferenceActivity的活动.

我的主题:android:theme ="@ android:style/Theme.Light.NoTitleBar.Fullscreen"应用于Manifest文件中的应用程序级别.

除了"PreferenceCategory"的"PreferenceScreen"元素之外,所有内容都获得了所需的主题.它们仍然具有默认的黑色背景.简单来说,具有父首选项屏幕的主要首选项类别屏幕正在获取主题,但如果我点击任何首选项屏幕以转到其元素首选项(EditText等等),它们就不会获得主题...

任何想法为什么会这样?

结构或preferences.xml是这样的:

<PreferenceCategory>

    <PreferenceScreen>
        <EditTextPreference>
        ...
        </EditTextPreference>
        <EditTextPreference>
        ...
        </EditTextPreference>
        ...
    </PreferenceScreen>

    <PreferenceScreen>
    ...
    </PreferenceScreen>

</PreferenceCategory>
Run Code Online (Sandbox Code Playgroud)

E P*_*lus 5

最后我发现了如何以编程方式更改主题"PreferenceActivity"(通过java代码)

要更改主题,请执行以下操作:

        @Override
        public void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.Holo_Theme_Light);
        super.onCreate(savedInstanceState);
        }
Run Code Online (Sandbox Code Playgroud)

始终在setTheme(R.style.yourtheme);方法之前调用super.onCreate(savedInstanceState);方法.通过这样做,它将产生如下所示的结果.

在此输入图像描述

就这样.

如果setTheme(R.style.yourtheme);在方法之后调用方法super.onCreate(savedInstanceState);,它将产生如下所示的结果.

在此输入图像描述

注意:嵌套的PreferenceScreen无法识别主题.要将主题应用于嵌套的PreferenceScreen,您必须为该嵌套的PreferenceScreen和调用setTheme(R.style.yourtheme);方法创建另一个PreferenceActivity .

  • 这可能是PreferencesFragment吗? (2认同)

THe*_*per 3

这是早期 Android 版本中的一个错误(另请参阅http://code.google.com/p/android/issues/detail?id=4611)。

如果我没记错的话,主题并未正确应用于所有 Android 2.x 版本上的 PreferenceActivity。解决此问题的一种方法是自己设置调整颜色/字体等,但错误报告的注释中还描述了一种解决方法。主题应该在 Android 3.0 及更高版本上正常工作。