以编程方式切换应用程序的主题?

我试图得到一个用户select的主题,觉得我很沮丧地接近。 在AndroidManifest.xml定义主题的工作方式应该是这样,但是(尽我所知)不能根据应用程序首选项进行更改:

 <application android:theme="@style/theme_sunshine" android:icon="@drawable/icon" android:label="@string/app_name"> 

另外,在每个活动中dynamic设置它也是可行的:

 someChosenTheme = PreferenceManager.getDefaultSharedPreferences(this).getString("themePreference", "theme_twilight"); setTheme(someOtherChosenTheme); 

但是,这似乎很混乱,我宁愿将整个应用程序的主题设置在一个地方。 我的第一个想法是一旦我的主要活动启动,就抓住应用程序的上下文,并在那里做:

 getApplicationContext().setTheme(R.style.theme_dummy); 

尽我所知, 这应该是诀窍,但实际上它没有做任何事情 – 整个应用程序具有默认的Android风格。 上述是否有效,如果是的话,我可能会做些别的愚蠢的事情吗?

如果有问题,我正在API级别3中工作。 在正确的方向刺激非常赞赏!

相关的问题。

为您的应用程序创build一个基本的Activity,并覆盖onCreate来设置主题。 从此基本活动中派生所有其他活动。

另请参阅本教程: http : //www.androidengineer.com/2010/06/using-themes-in-android-applications.html

可能有一个很好的解决scheme,但我找不到一个,所以我最终做了一个辅助类中的一个小的静态帮助方法,需要一个活动,基本上执行你写的这两行。 当然,这不是完美的,但只需在我的应用程序中为每个onCreate()方法添加一行代码就足够了。