我需要根据用户偏好设置应用程序主题。此过程在单独的活动中进行,而不是我的主要活动。我使用此代码更改了应用程序主题:
getApplicationContext().setTheme(R.style.theme);
我知道如果我在
之前使用它是完美的工作super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
onCreate()方法中的方法。但我必须采用单独的方法。我尝试在该代码之后重新启动应用程序,如下所示,但它不会重新启动应用程序。
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
finish();
startActivity(intent);
在重新启动应用程序之后我也不知道它会起作用。 任何建议都可以解决问题,以编程方式更改应用程序主题。
答案 0 :(得分:2)
尝试以下操作,它会在一秒后重新启动应用程序:
private void restartSelf() {
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis() + 1000, // one second
PendingIntent.getActivity(this, 0, getIntent(), PendingIntent.FLAG_ONE_SHOT
| PendingIntent.FLAG_CANCEL_CURRENT));
finish();
}
restartSelf()
应该是您主要活动的成员。或者,您可以将this
替换为您的应用程序的上下文,并将getIntent()
替换为主活动的Intent
。
答案 1 :(得分:1)
如果我理解正确,您可以尝试保存用户偏好选项吗? 在用户选择主题后,您可以将选择保存在持久性内存中(例如共享首选项),然后在选择之后重新启动应用程序。在主要活动的onCreate中,您可以通过访问持久性内存来访问用户选择并在super.onCreate()之前设置主题。