【问题标题】:Change theme according to android version根据android版本更改主题
【发布时间】:2011-02-01 17:16:43
【问题描述】:

我正在准备我的应用程序,以便与 Honeycomb 顺利配合。我有一个关于 android 主题的小美学问题。

对于蜂窝,建议使用以下主题。

android:theme="@android:style/Theme.Holo.Light" 

如何让我的应用在以前的版本中使用时使用另一个主题?

提前致谢

【问题讨论】:

    标签: android android-3.0-honeycomb


    【解决方案1】:

    编辑:针对已发布的 3.0 SDK 版本进行了更新。


    一种方法是设置<uses-sdk android:targetSdkVersion="11">。您还应该将它放在您的 <application> 定义之上。这将告诉系统在可用时使用全息主题,否则使用默认主题。

    另一种方法是定义一个主题,比如MyTheme,它根据 API 级别/操作系统版本从不同的主题继承。您可以使用resource directory qualifiers 来执行此操作。

    您的目录结构可能如下所示:

    res/
      values/
        styles.xml
      values-v11/
        styles.xml
    

    res/values/styles.xml 的内容类似于:

    <resources>
      <style name="MyTheme" parent="@android:style/Theme.Light">
        ...
      </style>
    </resources>
    

    res/values-v11/styles.xml 的内容类似于:

    <resources>
      <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
        ...
      </style>
    </resources>
    

    请注意,在未来,Holo 主题可能并不总是在 API 级别上有意义,因此您可能需要稍后调整此方法。您还可以使用其他目录限定符,例如 @987654330 @ 之类的。这完全取决于您。

    【讨论】:

    • 太棒了,谢谢罗曼。我很好奇您所说的“请注意,在未来,Holo 主题可能并不总是在 API 级别上有意义”。您的意思是说 Holo 主题可能会有所不同,还是会在未来的版本中添加一个全新的主题?因此开发人员可能需要容纳更多主题?这使得简单地执行诸如使用默认主题(无论是 Theme 还是 Theme.Holo)和 NoTitleBar 之类的事情变得困难。无论如何,感谢您的澄清;我期待着 ICS
    • 那是相当短视的评论 :-) 现在把它删掉。 Holo 绝对适用于 API 11+,无论物理尺寸如何。
    • @RomanNurik - 即使目标是 11,我也无法自动完成以识别 Holo Light。只有在 project.properties 中将目标更改为 android-11 后,该项目才能够编译和自动完成工作。
    • 现在的缺点是我可能会错误地使用高级 API 并使应用程序在旧设备上崩溃,因为我的 minSdkVersion 设置为 8。
    • @kilaka Android Lint 工具可以帮助您注意类似的事情。
    猜你喜欢
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2015-08-09
    相关资源
    最近更新 更多