41

我正在尝试获得用户选择的主题,并且感觉自己非常接近。按照应有的方式定义作品中的主题AndroidManifest.xml,但(据我所知)不能根据应用偏好进行更改:

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

或者,在每个活动中动态设置它也可以:

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

但这似乎很乱,我宁愿将整个应用程序的主题设置在一个地方。我的第一个想法是在我的主要活动启动后立即获取应用程序上下文并在那里执行:

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

据我所知,应该可以解决问题,但实际上它什么也没做 - 整个应用程序具有默认的 Android 样式。以上是否有效,如果是这样,我可能会做其他愚蠢的事情吗?

如果这很重要,我正在 API 级别 3 工作。非常感谢正确方向的产品!

相关问题。

4

2 回答 2

33

为您的应用创建一个基本活动并覆盖onCreate以设置主题。从此基础活动派生所有其他活动。

另请查看本教程:

http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html

于 2011-01-12T19:37:30.657 回答
5

可能有一个很好的解决方案,但我找不到一个,所以我最终在一个辅助类中创建了一个小的静态辅助方法,它接受一个 Activity 并基本上执行你编写的这两行。onCreate()当然,这并不完美,但只需在我的应用程序中的每个方法中添加一小行代码是可以接受的。

于 2011-01-11T23:17:56.447 回答