以编程方式更改应用程序主题(不在主要活动内)

时间:2014-02-21 01:09:19

标签: android android-layout android-theme

我需要根据用户偏好设置应用程序主题。此过程在单独的活动中进行,而不是我的主要活动。我使用此代码更改了应用程序主题:

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);

在重新启动应用程序之后我也不知道它会起作用。 任何建议都可以解决问题,以编程方式更改应用程序主题。

2 个答案:

答案 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()之前设置主题。