30

我目前正在开发我的应用程序,以将其设计基于 Holo 主题。在全球范围内我想做的是工作,但我对文件夹的工作方式有点困惑valuesvalues-v11并且values-v14.

所以我知道:

  • values针对低于 11 的 API
  • values-v11目标是 11 到 13 之间的 API
  • values-v14目标是优于 13 的 API

起初我以为我必须为每个文件夹指定应用程序所需的所有样式,但后来我意识到一种继承系统已经到位。

我的问题是我真的很困惑,不清楚这三个文件夹之间的继承是如何工作的。

我进行了以下测试以查看手机上的行为(在 Android 4.0 上运行,因此该文件夹values-v14应该是加载的文件夹):

values我有一种将文本颜色设置为蓝色的样式:

<style name="TextMedium" parent="@android:style/TextAppearance.Medium">
    <item name="android:textColor">@color/Blue</item>

values-v11我有一种将文本颜色设置为白色的样式:

<style name="TextMedium" parent="@android:style/TextAppearance.Medium">
    <item name="android:textColor">@color/White</item>

values-v14我有一种将文本颜色设置为红色的样式:

<style name="TextMedium" parent="@android:style/TextAppearance.Medium">
    <item name="android:textColor">@color/Red</item>

对于上面的第一种情况(每个文件夹具有不同的颜色),我的文本上加载的颜色是红色,这意味着values-v14文件夹具有优先权。

然后,如果我从文件夹中注释掉红色样式values-v14,则文本变为白色。这是否意味着values-v11即使设备以文件夹为目标,系统也会采用文件夹中的样式values-v14?我认为它可能会values默认使用该文件夹,但不是values-v11.

更一般地说,我的问题是,这 3 个文件夹是否作为父级和子级工作?意思是:

  • 如果设备在 API 版本 > 13 上运行,系统将加载values-v14thenvalues-v11和 finally values
  • 如果设备在 11 和 13 之间的 API 上运行,系统将加载values-v11,然后values.
  • 如果设备在 API 版本 < 11 上运行,系统将仅加载values.

如果确实如此,那么在父文件夹中设置最大样式values并仅在 v11 或 v14 中添加特定样式是否有意义?

抱歉,问题很长,我希望很清楚,这个主题/样式系统仅在 Android 指南中进行了简要描述,很难找到有关它如何工作的信息......

谢谢你的帮助!

4

1 回答 1

26

更一般地说,我的问题是,这 3 个文件夹是否作为父级和子级工作?

这些文件夹使用“最具体”的匹配系统,这意味着它将匹配最接近(较低)的 API 级别values文件夹:

  • values-v14目标 APIs >= 14(以下版本根本不会选择它14
  • values-v11目标 API 介于(和包括)之间1113如果values-v14存在,否则它将匹配从11及以上开始的每个版本((对于以下版本根本不会选择它11))
  • values是默认文件夹,它将是最后一个匹配的文件夹,涵盖其他values-xx文件夹未涵盖的其他 API 级别。您应该始终(与所有资源文件夹一样)在您的应用程序中拥有此文件夹

如果它确实是它的工作方式,那么在父文件夹值中设置最大样式并在 v11 或 v14 中仅添加特定样式是否有意义?

是的,这就是 Android 项目模板的构建方式(当您使用 时Create new project...),它实际上告诉您使用values-xx文件夹进行自定义(不同的外观,使用较新的样式,属性):

 <!-- in the styles.xml from the v-14 values folder: -->
 <!-- API 14 theme customizations can go here. -->
于 2013-12-31T06:52:24.433 回答