2016-02-17 14 views
5

Trong ví dụ android phong cách cha mẹ được định nghĩa như thế nàyXML @style trong mẹ

<style name="GreenText" parent="@android:style/TextAppearance"> 

nhưng trong nguồn android i tìm

<style name="Widget.AppCompat.ActionBar.TabText" parent="Base.Widget.AppCompat.ActionBar.TabText"> 

whats sự khác biệt khi tôi tiền tố với @style và @android: phong cách hay không?

Trả lời

0

Nói chung, nếu bạn đặt "@android" trước một cái gì đó, nó có nghĩa là bạn đang tìm kiếm một tài nguyên quy định tại android gói, không phải trong dự án của bạn.

Ví dụ, nếu bạn đang cố gắng để có được một màu:

android:background="@android:color/holo_red_dark" 

này sẽ có được màu sắc holo_red_dark Android. Bạn không có màu này được xác định trong dự án của bạn.

android:background="@color/my_red_color" 

Điều này sẽ nhận được "my_red_color" được xác định trong dự án của bạn.

Các kiểu tương tự.

EDIT: Vấn đề là không có sự khác biệt giữa

parent="@style/MyStyle" 

parent="MyStyle" 

cho một phong cách tổng hợp trong dự án của bạn. Bạn cũng có thể chỉ cần viết

<style name="Widget.AppCompat.ActionBar.TabText" parent="@style/Base.Widget.AppCompat.ActionBar.TabText"> 

và nó sẽ hoạt động.

Do đó, có tính đến Base.Widget.AppCompat.ActionBar.TabText được biên soạn trong biểu mẫu dự án của bạn thư viện hỗ trợ, bạn có thể thêm nó với @style làm tiền tố hoặc không có. Tuy nhiên, @android:style/TextAppearance là từ gói Android và đó là lý do tại sao bạn phải chỉ định @android: làm tiền tố.

Tôi hy vọng điều này là rõ ràng ngay bây giờ

+0

có thats sự khác biệt giữa \ @android: phong cách và \ @ style, nhưng tôi đang tìm sự khác biệt giữa cha mẹ = "\ @ style/TextAppearance" và parent = "TextAppearance" – wutzebaer

+0

ok có nghĩa là không có sự khác biệt hoặc thêm \ @ style prefix đến thuộc tính cha hoặc không? – wutzebaer

+0

Có - chỉ khi kiểu giới thiệu được xác định trong dự án của bạn (bởi bạn, nhà phát triển hoặc trong bất kỳ thư viện nào bạn đã thêm - trong trường hợp này là thư viện hỗ trợ). – DDsix

0

Bởi vì các nhà phát triển trong các nguồn là kế thừa kiểu họ tự xác định.

Nếu bạn xác định

<style name="CodeFont" parent="@android:style/TextAppearance"> 
     <item name="android:textColor">#00FF00</item> 
    </style> 

Bạn không cần phải viết một mẹ từ phong cách, nhưng chỉ có thể viết

<style name="CodeFont.Red"> 
    <item name="android:textColor">#FF0000</item> 
</style> 

như vậy.

Giải thích từ đây http://developer.android.com/guide/topics/ui/themes.html#Inheritance

Chú ý rằng không có thuộc tính cha mẹ trong thẻ <style>, nhưng vì thuộc tính tên bắt đầu bằng tên phong cách CodeFont (mà là một phong cách mà bạn đã tạo), phong cách này được thừa hưởng tất cả các thuộc tính kiểu từ kiểu đó. Kiểu này sau đó ghi đè thuộc tính android: textColor để làm cho văn bản màu đỏ. Bạn có thể tham khảo kiểu mới này theo kiểu @/CodeFont.Red.

Bạn có thể tiếp tục kế thừa như thế này bao nhiêu lần tùy thích, bằng cách nối tên với dấu chấm. Ví dụ, bạn có thể mở rộng CodeFont.Red là lớn hơn, với:

<style name="CodeFont.Red.Big"> 
    <item name="android:textSize">30sp</item> 
</style> 
+1

nhưng nếu tôi sử dụng thuộc tính parrent, có sự khác biệt khi tôi đặt tiền tố với "@ style /" không? – wutzebaer

+0

Nếu đó là phong cách của bạn, bạn có thể chỉ định nó mà không có @ style, nếu không bạn phải đặt nó trước tên phong cách. – davrog

+0

nhưng tôi thường sử dụng các kiểu không phải của tôi mà không có tiền tố: