我希望我的应用程序的用户能够更改应用程序主题。 例如,暗,光,光,暗动作条和设备默认。这怎么可能,我有一个prefrences屏幕,其中有一个listpref,有四个选项(如上所示)。如何让用户更改应用主题?
由于
答案 0 :(得分:3)
如果您只想使用内置主题并且不需要自定义它们,这很容易。
作为一个例子,我将使用ListPreferece
这样的条目值:
<string-array name="pref_theme_values" translatable="false">
<item>THEME_LIGHT</item>
<item>THEME_DARK</item>
</string-array>
然后,您可以使用此方法检索所选值:
public int getThemeId(Context context) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
String theme = settings.getString(context.getResources().getString(R.string.pref_theme_key), null);
if (theme == null || theme.equals("THEME_LIGHT")) {
return android.R.style.Theme_Holo_Light;
} else if (theme.equals("THEME_DARK")) {
return android.R.style.Theme_Holo;
}
// default
return android.R.style.Theme_Holo_Light;
}
之后你应该覆盖onCreate
方法:
// onCreate
this.mCurrentTheme = this.getThemeId(this);
this.setTheme(this.mCurrentTheme);
this.setContentView(...); // should be after the setTheme call
和onStart
方法(因为您需要在用户从settigns页面返回后立即刷新主题)
// onStart
int newTheme = this.getThemeId(this);
if(this.mCurrentTheme != newTheme) {
this.finish();
this.startActivity(new Intent(this, this.getClass()));
return;
}
此外,您需要以某种方式保存活动状态,以便应用程序在重新启动活动后显示相同的数据。
答案 1 :(得分:2)
以下是如何操作的示例;
if (prefs.getBoolean("1darkTheme", false)==false){//user has selected dark theme
setTheme(android.R.style.Theme_Holo);
Toast.makeText(getApplicationContext(), "dark", Toast.LENGTH_SHORT).show();
} else {
setTheme(android.R.style.Theme_Holo_Light);
Toast.makeText(getApplicationContext(), "light", Toast.LENGTH_SHORT).show();
}
setContentView(R.layout.main);