2016-03-29 62 views
5

在android開發人員的示例,博客等中,我已經看到了多個風格屬性值的前綴。有人可以描述何時使用什麼?例如,這三種情況有什麼區別?Android風格 - @style,android:,@android:style等的區別

parent="@android:style/TextAppearance" 
parent="TextAppearance.AppCompat" 
parent="@style/TextAppearance.AppCompat" 

這兩種情況有什麼區別?

<item name="colorControlNormal">@color/white</item> 
<item name="android:colorControlNormal">@color/white</item> 

回答

4

沒有任何前綴引用在同一文件上命名的樣式。

@Style引用您的style.xml項目文件。

@android:style引用定義Android API風格。

更多關於Style ResourceStyle and Themes

關於colorControlNormal vs android:colorControlNormal是一樣的解釋。如果您使用controlColorNormal您正在定義在您的應用程序中以正常狀態應用於框架控件的顏色。如果您使用android:colorControlNormal您覆蓋由系統應用於框架控件的顏色默認值。

+0

這不適用於AppCompat。 – technophyle

2

您可以將@想象爲一個指定資源即將到來的信號。

@type/name標識類型type(字符串,顏色,佈局,樣式等)的資源名稱name定義在應用程序即將到來。

@+id/name標識一個名爲name的id資源,如果它尚不存在(而@id只是指一個已經存在的id),它將被創建。

@android:type/name意味着指定的資源是即將到來的Android平臺的一部分(它的而不是在應用中定義 - 它由設備提供)。

對於風格父母,@style是可選的。您可以通過名稱直接引用樣式。這是多餘的,因爲無論如何你都無法從其他風格以外的任何風格中派生出風格。

+0

謝謝。你能否詳細說明colorControlNormal vs android:colorControlNormal部分。我應該在我的style.xml中使用哪一個? – clocksmith

+1

這不是關於你應該使用哪一個,而是關於爲你的情況找出正確的一個。如果它是您自己定義的資源,那麼只需使用該名稱即可。如果它是由Android平臺定義的,則需要android前綴。 –

+0

就像道格說的那樣。看看我上面編輯的帖子。 –