我希望我的应用程序的用户能够更改应用程序主题。例如,深色、浅色、浅色,带有深色操作栏和设备默认设置。这怎么可能,我有一个偏好屏幕,里面有一个列表偏好,有四个选项(如上所示)。如何让用户更改应用主题?
谢谢
我希望我的应用程序的用户能够更改应用程序主题。例如,深色、浅色、浅色,带有深色操作栏和设备默认设置。这怎么可能,我有一个偏好屏幕,里面有一个列表偏好,有四个选项(如上所示)。如何让用户更改应用主题?
谢谢
如果您只想使用内置主题并且不需要自定义它们,这很容易。
作为一个例子,我将使用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;
}
您还需要以某种方式保存活动状态,以便应用程序在活动重新启动后显示相同的数据。
这是一个如何做的例子;
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);