Java 如何更改首选活动主题?
我正在尝试在我的应用程序中更改PreferenceActivity的主题,但我无法让它工作 这是xml: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
<?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" >