android - 根据构建时的 Android 版本更改主题和样式

标签 android android-styles

我知道我可以为不同的 API 级别添加不同的 XML,例如为 values-v21 和 values-v19 使用不同的样式。我想了解的是构建系统实际上如何处理这些不同的值?因此,例如,如果我的大部分样式在所有 API 中都是通用的,并且一种样式中的一项在 21 和其他样式之间发生变化,我是否:

1)将整个styles.xml复制到v21中,并更改我需要更改的一个值

2) v21下只添加那个改成styles.xml的样式

3) 只添加在 21 岁以下改变的那一种风格的那一件

这很令人困惑,我找不到任何关于构建过程如何处理合并样式的文档。

最佳答案

规则很明确:

  1. 在运行 Android 时 selects the best-matching style
  2. 如果所选样式是子样式,Android merges它的项目具有父级最佳匹配样式

    如果您通过引用提供可变项目,只需定义其值以匹配所选的 api 版本。

    <style name="SomeStyle">
        <item name="someColor">@color/some_color</item>
    </style>
    

您可以在 color-v21 文件夹中为 API 21 提供 some_color.xml,在 color 文件夹中提供此文件的通用版本所有其他 API 级别。

示例:

您想为非 v21 API 使用以下样式

    <style name="FinalStyle">
        <item name="commonText">It\'s a common text</item>
        <item name="specificDrawable">@drawable/icon</item>
        <item name="specificColor">@color/primary_color</item>
        <item name="specificText">non-v21</item>
    </style>

以及 v21 API 的以下样式

    <style name="FinalStyle">
        <item name="commonText">It\'s a common text</item>
        <item name="specificDrawable">@drawable/icon</item>
        <item name="specificColor">@color/secondary_color</item>
        <item name="specificText">v21</item>
    </style>

v21/non-v21 API 具体参数不同,通用参数通用。

怎么做?

  • res/values/styles.xml

    <style name="BaseStyle">
        <item name="commonText">It\'s a common text</item>
        <item name="specificDrawable">@drawable/icon</item>
    </style>
    
    <style name="FinalStyle" parent="BaseStyle">
        <item name="specificColor">@color/primary_color</item>
        <item name="specificText">non-v21</item>
    </style>
    
  • res/values-v21/styles.xml

    <style name="FinalStyle" parent="BaseStyle">
        <item name="specificColor">@color/secondary_color</item>
        <item name="specificText">v21</item>
    </style>
    
  • res/drawable/icon.png 常用图标

  • res/drawable-v21/icon.png v21 图标

Android 在FinalStyle 中搜索v21 时,会从res/values-v21 中选择FinalStyle 定义作为最佳匹配样式,并与基本样式。在此示例中,还有另一个最佳匹配资源搜索,当 Android 搜索 @drawable/icon 时。

关于android - 根据构建时的 Android 版本更改主题和样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31050289/

相关文章:

android - sub3.0 设备上的 ActionBar - 使用我的自定义系统实现 ActionBarSherlock?

android - 找不到 @style/Widget.Holo.ActionBar.TabView 的资源

android - 如何在 Android 中以编程方式创建 'Horizontal style' 进度条?

android - Android 的 XML 属性中的问号 (?)

java - 如何实现带有文本模糊和阴影的Android按钮动画

android - 如何给listView这个阴影样式?

java - 在 Android 中开发 native 应用程序时可以使用哪些 Java 类?

android - 如何使用 Android Room 创建一个包含两个或多个外键的表?

java - 通过单击按钮 [2 个 Activity ] 更改 Textview 的文本

Android:在电话中操纵语音