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

Luk*_*kap 4 android themes

我有设备A和设备B.

我可以很容易地检测到应用程序是在设备A上还是在设备B上运行.现在我需要的是在设备A的主题(样式)和设备B上的其他设备上使用.

我怎样才能做到这一点?

hac*_*bod 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
Run Code Online (Sandbox Code Playgroud)

-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().