2013-05-18 25 views
29

我目前正在致力於我的應用程序基於其設計的全息主題。全球我想做的是工作,但我對工作文件夾valuesvalues-v11values-v14的方式有點困惑。樣式和主題的價值觀,值-V11和值-V14文件夾

所以我知道:

  • values瞄準的是API遜色於11
  • values-v11的目標是11和13
  • values-v14之間的API的目標是優越的API,以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-v14,系統也會採用values-v11文件夾中的樣式?我認爲它可能會默認使用values文件夾,但不會使用values-v11

更一般地說,我的問題是,這3個文件夾是作爲父母還是孩子工作的? 含義是:

  • 如果該設備上的API版本> 13運行時,系統將加載values-v14然後values-v11和最後values
  • 如果設備在11和13之間的API上運行,則系統將加載values-v11,然後加載values
  • 如果設備在API版本< 11上運行,系統將僅加載values

如果它確實是它的工作方式,是否有意義,然後設置最大的風格在父文件夾values和V11或V14只添加特定的人?

對不起,長的問題,我希望它是明確的,這個主題/風格的系統僅在Android指南中簡要介紹,這是很難找到它如何工作的信息...

謝謝您幫幫我!

+4

如果存在**值-v14 **,那麼'values-v14'的目標API> = 14,'values-v11'在(包括)11和13 **之間的目標API **否則**將匹配每個版本從11開始。 'values'是默認的文件夾,它將是最後匹配的,覆蓋其他API不包含的其他'values-xx'文件夾。 – Luksprog

+0

謝謝Luksprog。基於這種機制,這意味着最好只安裝v11和v14風格,而不能被較低版本使用。 (爲了保持簡單的樣式,就像我在'values'中發佈的那樣)? –

+2

這就是想法,在使用從該版本添加的屬性時使用版本指示符。例如,Honeycomb引入了「ListView」的'activatedBackgroundIndicator'屬性。因爲這不在'11'下面,所以'values'文件夾不會使用這個文件夾,但是你可以包含一個'values-v11'文件夾來利用應用程序中的屬性。但是如果您有不同的文件夾,則需要其他樣式。 – Luksprog

回答

25

更一般地,我的問題是,這3個文件夾工作作爲父母 和孩子?

這些文件夾與「最具體的」匹配系統的工作這意味着它將匹配最接近的(低級)API級別values文件夾:

  • values-v14目標的API> = 14(它不會被在選擇所有低於14版本)之間
  • values-v11目標的API(包括)1113如果values-v14存在否則將墊ch每個版本開始於11及以上((對於11以下的版本根本不會選擇)
  • values是默認文件夾,它將是最後匹配的,覆蓋其他API級別未覆蓋的其他values-xx夾。你應該總是(與所有資源文件夾)有這個文件夾在你的應用

如果它確實是它的工作方式,是否有意義然後 設置最大的風格在父文件夾值,並只添加 特定的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. -->