android - 以编程方式更改应用程序主题(不在主要 Activity 中)

标签 android android-layout android-theme

我需要根据用户喜好设置应用主题。这个过程发生在单独的 Activity 中,它不是我的主要 Activity 。我使用这段代码来更改应用程序主题:

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

我也不知道在重新启动应用程序后它会工作。 如果有任何建议可以解决以编程方式更改应用程序主题的问题,我们将不胜感激。

最佳答案

尝试以下操作,它会在一秒钟后重新启动应用程序:

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() 应该是您的主要 Activity 的成员。或者,您可以将 this 替换为应用程序的上下文,将 getIntent() 替换为主要 Activity 的 Intent

关于android - 以编程方式更改应用程序主题(不在主要 Activity 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21923197/

相关文章:

android - 如何在自定义 View 中绘制文本?

android - 如何将屏幕坐标插入hashmap android

android - 为警报对话框设置 Android Theme.Light

android - Android 设备上的 GPU 编程

java - 为什么我的绳子无法正确穿过 socket ?

android - 是否可以通过 firebase auth 仅使用短信服务和离线注册用户,即没有互联网

java - Android 的监听器构造可以在 Windows Phone 中使用吗?

android - 如何使光标停留在edittext的中心

android - 为什么 Cast MediaRouteButton 即使在 Holo.Light Action-Bar 上也总是白色的?

android - 如何更改 ProgressDialog 的颜色