我目前正在开发我的应用程序,将其设计基于Holo主题。在全球范围内我想做的是工作,但我对文件夹values
,values-v11
和values-v14
的处理方式感到有些困惑。
所以我知道:
values
的目标是API低于11 values-v11
的目标是11到13之间的API values-v14
的目标是优于13 起初我以为我必须为每个文件夹指定应用程序所需的所有样式,但后来我意识到了一种继承系统。
我的问题是我真的很困惑,并且不清楚如何在这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
。
更一般地说,我的问题是,这三个文件夹是作为父母和孩子工作吗? 意思是:
values-v14
然后加载values-v11
,最后加载values
。values-v11
,然后加载values
。values
。如果它确实是它的工作方式,那么在父文件夹values
中设置最大样式并在v11或v14中只添加特定的样式是否有意义?
很抱歉这个很长的问题,我希望很明显,这个主题/风格系统只在Android指南中简要描述,很难找到有关它的工作原理的信息......
感谢您的帮助!
答案 0 :(得分:25)
更一般地说,我的问题是,这3个文件夹是否作为父文件夹工作 和孩子?
这些文件夹使用“最具体”的匹配系统,这意味着它将匹配最近(较低)的API级values
文件夹:
values-v14
定位API&gt; = 14
(对于14
以下的版本,它不会被选中)values-v11
存在,则11
定位(包括)13
和values-v14
之间的API 否则它将匹配以{开头的每个版本{1}}及更高版本((11
以下版本不会选择它))11
是默认文件夹,它将是最后一个匹配的文件夹,涵盖其他values
文件夹未涵盖的其他API级别。您应始终(与所有资源文件夹一样)在您的应用中使用此文件夹如果它确实是它的工作方式,那么它是否有意义 设置父文件夹值中的最大样式并仅添加 v11或v14中的特定内容?
是的,这就是Android项目模板的构建方式(当你使用values-xx
时),它实际上告诉你使用Create new project...
文件夹进行自定义(不同外观,使用更新的样式,属性) ):
values-xx