我正在尝试创建静态类ActivitySetup,用于为我的活动设置语言,主题等。我在设置主题时遇到问题。现在我有以下代码:
static void configureTheme(Activity activity, int defaultTheme) {
String theme = PreferenceManager.getDefaultSharedPreferences(activity).getString("theme", "light");
assert theme != null;
switch (theme) {
case "light":
activity.setTheme(R.style.AppTheme);
break;
case "dark":
activity.setTheme(R.style.Theme_AppCompat);
break;
default:
activity.setTheme(defaultTheme);
break;
}
}
但它崩溃了。我知道我应该使用 super (of activity).setTheme
而不是 activity.setTheme
,但我该怎么做呢?如何将超类的实例作为参数传递给静态方法?
在主题之间动态切换,您只需在super.onCreate
之前调用setTheme
public void onCreate(Bundle savedInstanceState) {
setTheme(android.R.style.Theme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
谢谢。这就是我找到的答案:
static int getThemeRes(Activity activity) throws Resources.NotFoundException {
String theme = PreferenceManager.getDefaultSharedPreferences(activity).getString("theme", "light");
assert theme != null;
switch (theme) {
case "light":
return R.style.AppTheme;
case "dark":
return R.style.Theme_AppCompat;
default:
throw new Resources.NotFoundException();
}
}
在所有活动中调用此方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(ActivitySetup.getThemeRes(this));
super.onCreate(savedInstanceState);
setContentView(LAYOUT); }