Java 如何更改首选活动主题?

Java 如何更改首选活动主题?,java,android,Java,Android,我正在尝试在我的应用程序中更改PreferenceActivity的主题,但我无法让它工作 这是xml: <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <SwitchPreference android:title="Auto Clear" androi

我正在尝试在我的应用程序中更改PreferenceActivity的主题,但我无法让它工作

这是xml:

    <?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

        <SwitchPreference android:title="Auto Clear" android:key="autoclear" android:summary="Clear the command line when the code is being executed." android:defaultValue="false"/>
        <ListPreference android:title="Choose a theme" android:negativeButtonText="" android:dialogTitle="" android:key="theme" android:entries="@array/themesList" android:entryValues="@array/themesList" android:defaultValue="Default" />

</PreferenceScreen>
结果是:


您是否尝试在清单中的活动标记上应用主题?我以前就是这样做的-

<activity 
  android:label="@string/app_name" 
  android:name="com.example.MyPreferenceActivity"
  android:theme="@android:style/Theme.Black"
  android:exported="true"
  android:icon="@drawable/ic_launcher"></activity>

如果要更改背景,可以使用

public class FractalPreferenceActivity extends PreferenceActivity  {
   .......

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setBackgroundDrawableResource(R.drawable.gradient); 
    getListView().setBackgroundColor(Color.TRANSPARENT); 
    getListView().setCacheColorHint(Color.TRANSPARENT); 

           .......
    }

}

最后,我发现了如何通过编程(通过java代码)更改“首选项活动”的主题

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

        @Override
        public void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.Holo_Theme_Light);
        super.onCreate(savedInstanceState);
        }
始终调用
setTheme(R.style.yourtheme)
super.onCreate(savedInstanceState)之前的方法方法。这样做将产生如下所示的结果

就这些

如果你调用
setTheme(R.style.yourtheme)super.onCreate(savedInstanceState)之后的code>method方法它将产生如下所示的结果


注意:嵌套首选项屏幕无法识别主题。要将主题应用于该嵌套首选项屏幕,您必须为该嵌套首选项屏幕创建另一个首选项活动,并调用
setTheme(R.style.yourtheme)方法。

我个人使用这种方法: 对于低于11的API,我使用(values目录,themes.xml文件):


对于更高版本(例如values-v14目录,themes.xml文件):


并表明:

 <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

Android将根据设备的API自动选择主题,并且无需在活动(清单)中指定任何主题,也无需在代码中指定语法


这听起来很愚蠢,但是使用
setTheme()
可以处理所有片段,但不能处理主要的首选项活动。在清单文件中设置此选项,它将突然开始工作

我根据用户偏好动态设置主题,在主题管理器对象的
onCreate
之前调用
setTheme()
(它还分配各种颜色和
drawables
,这些颜色和可绘制的内容可以由我不想在样式中设置的主题更改…主要是因为它太容易混淆,弄不清是什么)


不知道为什么在清单中设置它会使
setTheme()
起作用。我想这只是一些特定于首选项活动的小故障。

但是我想以编程方式更改主题,因为在设置中用户可以更改主题。所以每次PreferenceActivity开始时,我都想通过代码更改主题。啊,我明白了。我已经更新了上面的帖子。希望这有助于解决问题。您想更改整个应用程序的主题还是仅更改PreferenceActivity?您看过这些吗。不仅仅是背景,R.style.AppTheme是一个全新的主题。
        @Override
        public void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.Holo_Theme_Light);
        super.onCreate(savedInstanceState);
        }
  <?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="MyTheme" parent="@android:style/Theme.Light.NoTitleBar"></style>

</resources>
    <?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="MyTheme" parent="@android:style/Theme.Holo.Light.NoActionBar"></style>

</resources>
 <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >