在运行时以编程方式选择样式/主题

时间:2011-07-28 15:52:07

标签: android themes

我有设备A和设备B.

我可以轻松检测到应用是在设备A上运行还是在设备B上运行。 现在我需要的是在设备A的主题(样式)和设备B上的其他设备上使用。

我该怎么做?

1 个答案:

答案 0 :(得分:8)

在Activity.onCreate()中,您可以调用setTheme()来设置您想要使用的主题。请注意,必须先执行 之前调用setContentView()或以其他方式创建UI。

请注意,当用户启动您的应用时,系统会在发生这种情况时显示预览。此前一个基于创建一个与清单中声明的​​主题相匹配的窗口。您希望这与您在onCreate()中设置的主题尽可能匹配,以尽可能顺利地过渡到您的应用。

如果您希望主题根据某些设备配置(例如平台版本或屏幕大小)而有所不同,则可以通过所有资源执行此操作。只需为您想要的不同配置声明主题的不同版本。文件布局类似于:

values/
    styles.xml   # Required default theme
values-v11/
    styles.xml   # Theme when running on Android 3.0 or higher
values-xlarge/
    styles.xml   # Theme when running on an xlarge screen

-v11允许您拥有在较新平台上运行时使用新主题的主题版本,同时还原为旧版本兼容的内容。例如,在values-v11样式中,您的主题的父级可以是新的@android:style / Theme.Holo,而基本的父级将继承自旧的@android:style / Theme。

此外,Android 3.0为您提供了一种在运行时更改主题的方法,方法是在配置发生更改时重新启动您的活动:http://developer.android.com/reference/android/app/Activity.html#recreate()

在调用之后,创建的Activity的新实例可以使用与先前使用的主题不同的值(例如,基于保存的实例状态或共享首选项中的信息)调用setTheme()。