值,值-v11和值-v14文件夹的样式和主题

时间:2013-05-18 12:35:19

标签: android android-theme android-styles

我目前正在开发我的应用程序,将其设计基于Holo主题。在全球范围内我想做的是工作,但我对文件夹valuesvalues-v11values-v14的处理方式感到有些困惑。

所以我知道:

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

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

我的问题是我真的很困惑,并且不清楚如何在这3个文件夹之间进行这种继承。

我做了以下测试,以便查看手机上的行为(在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

更一般地说,我的问题是,这三个文件夹是作为父母和孩子工作吗? 意思是:

  • 如果设备在API版本上运行&gt; 13,系统将加载values-v14然后加载values-v11,最后加载values
  • 如果设备在11到13之间的API上运行,系统将加载values-v11,然后加载values
  • 如果设备在API版本上运行&lt; 11,系统只会加载values

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

很抱歉这个很长的问题,我希望很明显,这个主题/风格系统只在Android指南中简要描述,很难找到有关它的工作原理的信息......

感谢您的帮助!

1 个答案:

答案 0 :(得分:25)

  

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

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

  • values-v14定位API&gt; = 14(对于14以下的版本,它不会被选中)
  • 如果values-v11存在,则
  • 11定位(包括)13values-v14之间的API 否则它将匹配以{开头的每个版本{1}}及更高版本((11以下版本不会选择它))
  • 11是默认文件夹,它将是最后一个匹配的文件夹,涵盖其他values文件夹未涵盖的其他API级别。您应始终(与所有资源文件夹一样)在您的应用中使用此文件夹
  

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

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

values-xx
相关问题