2013-05-18 26 views
29

Tôi hiện đang làm việc trên ứng dụng của mình dựa trên thiết kế của nó về chủ đề Holo. Toàn cầu những gì tôi muốn làm là làm việc nhưng tôi hơi bối rối về cách làm việc các thư mục values, values-v11values-v14.Kiểu và chủ đề về giá trị, thư mục values-v11 và values-v14

Vì vậy, tôi biết rằng:

  • values được nhắm mục tiêu các API thua kém 11
  • values-v11 được nhắm mục tiêu các API giữa 11 và 13
  • values-v14 được nhắm mục tiêu các API vượt trội so với 13

Lúc đầu, tôi nghĩ rằng tôi đã phải chỉ định cho mỗi thư mục tất cả các phong cách cần thiết cho các ứng dụng nhưng sau đó tôi nhận ra một loại sy kế thừa gốc đã được đặt ra.

Vấn đề của tôi là tôi thực sự bối rối và không hiểu rõ cách thức hoạt động của kế thừa này giữa 3 thư mục này.

tôi đã thử nghiệm sau đây để thấy những hành vi trên điện thoại của tôi (chạy trên Android 4.0, vì vậy các thư mục values-v14 nên là một nạp):

Trong values Tôi có một phong cách để thiết lập trong màu xanh màu chữ:

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

trong values-v11 tôi có một phong cách để thiết lập màu trắng màu sắc văn bản:

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

Trong values-v14 Tôi có một phong cách để thiết lập màu đỏ màu sắc văn bản:

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

Đối với trường hợp đầu tiên ở trên (mỗi thư mục với một màu khác nhau), màu sắc được nạp trên văn bản của tôi có màu đỏ, nghĩa là thư mục values-v14 được ưu tiên.

Sau đó, nếu tôi nhận xét kiểu màu đỏ từ thư mục values-v14, văn bản trở thành màu trắng. Điều đó có nghĩa là hệ thống sẽ lấy phong cách trong thư mục values-v11 ngay cả khi thiết bị đang nhắm mục tiêu thư mục values-v14? Tôi nghĩ rằng nó có thể sử dụng thư mục values theo mặc định nhưng không sử dụng values-v11.

Nói chung, câu hỏi của tôi là, 3 thư mục này có hoạt động như cha mẹ và con không? Ý nghĩa rằng:

  • Nếu thiết bị đang chạy trên một phiên bản API> 13, hệ thống sẽ tải values-v14 sau đó values-v11 và cuối cùng values.
  • Nếu thiết bị đang chạy trên API từ 11 đến 13, hệ thống sẽ tải values-v11 và sau đó values.
  • Nếu thiết bị đang chạy trên phiên bản API < 11, hệ thống sẽ chỉ tải values.

Nếu nó thực sự là cách nó hoạt động, có ý nghĩa sau đó để thiết lập tối đa các kiểu trong thư mục mẹ values và chỉ thêm những kiểu cụ thể trong v11 hoặc v14?

Xin lỗi cho câu hỏi dài, tôi hy vọng nó là rõ ràng, điều này hệ thống chủ đề/phong cách được chỉ mô tả ngắn gọn trong hướng dẫn sử dụng Android và rất khó để tìm thông tin về cách thức hoạt động ...

Cám ơn bạn Cứu giúp!

+4

'values-v14' nhắm mục tiêu API> = 14,' values-v11' nhắm mục tiêu API giữa (bao gồm) 11 và 13 ** nếu ** 'values-v14' hiện diện ** nếu không ** sẽ khớp với mọi phiên bản bắt đầu từ 11 trở lên. 'giá trị' là thư mục mặc định và nó sẽ là thư mục cuối cùng được đối sánh, bao gồm các cấp API khác không nằm trong thư mục' values-xx' khác. – Luksprog

+0

Cảm ơn Luksprog. Dựa trên cơ chế đó, nó có nghĩa là tốt hơn là chỉ thiết lập trong các kiểu v11 và v14 mà không thể được sử dụng bởi các phiên bản thấp hơn? (và vì vậy để giữ cho các kiểu đơn giản giống như kiểu tôi đã đăng trong 'giá trị'?) –

+2

Đó là ý tưởng, sử dụng các chỉ báo phiên bản khi sử dụng các thuộc tính được thêm từ phiên bản đó. Ví dụ, Honeycomb đã giới thiệu thuộc tính 'activateBackgroundIndicator' cho một' ListView'. Vì điều này không xuất hiện bên dưới '11', thư mục' values' sẽ không sử dụng thư mục này nhưng bạn có thể bao gồm thư mục 'values-v11' để tận dụng lợi thế của thuộc tính trong ứng dụng cho các phiên bản có nó. Nhưng bạn cần phải có các phong cách khác hiện tại nếu bạn có các thư mục khác nhau. – Luksprog

Trả lời

25

Nói chung, câu hỏi của tôi là, 3 thư mục này có hoạt động như phụ huynh và trẻ em không?

Những thư mục làm việc với một hệ thống phù hợp với "cụ thể nhất" có nghĩa là nó sẽ phù hợp gần nhất cấp (thấp hơn) API values thư mục:

  • values-v14 mục tiêu API> = 14 (nó sẽ không được lựa chọn tại tất cả các phiên bản dưới đây 14)
  • values-v11 mục tiêu API giữa (và bao gồm) 1113 nếu values-v14 hiện diện khác nó sẽ mat ch mọi phiên bản bắt đầu bằng 11 trở lên ((nó sẽ không được chọn cho tất cả các phiên bản dưới đây 11))
  • values là thư mục mặc định và nó sẽ là đối sánh cuối cùng, bao gồm các cấp API khác không được bao gồm bởi values-xx khác thư mục. Bạn nên thường xuyên (như với tất cả các thư mục nguồn lực) có thư mục này trong ứng dụng của bạn

Nếu nó thực sự là cách thức mà nó đang làm việc, nó có ý nghĩa sau đó đến thiết lập tối đa phong cách trong thư mục mẹ giá trị và chỉ thêm các giá trị cụ thể trong v11 hoặc v14?

Vâng, đây là cách mẫu dự án Android được xây dựng (khi bạn sử dụng Create new project...), nó thực sự cho bạn biết sử dụng values-xx các thư mục để tùy biến (cái nhìn khác nhau, sử dụng các phong cách mới hơn, thuộc tính):

<!-- in the styles.xml from the v-14 values folder: --> 
<!-- API 14 theme customizations can go here. -->