2016-03-02 44 views
0

據我所知,在Android的東西我在水庫的地方/目錄會被編譯成適當的R等級:android的前綴何時需要?

res/drawable -> R.drawable 
res/layout -> R.layout 

我知道我還可以使用在Android包項目:

android.R.id.text1 

如果我想使用XML我的資源,我可以做到以下幾點:

<TextView 
    ... 
    android:text="@string/my_text" /> 

如果我想使用的東西在Android包,我可以做到以下幾點:

<TextView 
    ... 
    android:id="@android:id/text1" /> 

這並不總是似乎是這樣,我想不通的區別。 當使用程序兼容性主題:的

<TextView 
    android:theme="@style/Theme.AppCompat.Light" 
    android:textAppearance="@style/TextAppearance.AppCompat.Subhead" /> 

代替

<TextView 
    android:theme="@android:style/Theme.AppCompat.Light" 
    android:textAppearance="@android:style/TextAppearance.AppCompat.Subhead" /> 

Theme.AppCompat.Light和TextAppearance.AppCompat.Subhead沒有在我的RES /目錄下的任何地方所定義。它們包含在support.v7.appcompat支持庫中。爲什麼我不需要在這種情況下使用android前綴?

回答

2

因爲它們是您的應用程序的一部分,而不是框架的一部分。並不是你不需要它;如果你嘗試它,你會得到一個編譯錯誤。

appcompat-v7碰巧是一個庫的事實並不重要。這與你自己輸入代碼沒有什麼不同。您應用中的任何內容都不使用android前綴。資源是框架—的一部分,因此在設備上,而不是在您的應用—中獲得android前綴。

+0

因此,支持庫中沒有使用前綴。只有屬於目標sdk的東西? – Dismissile

+0

@Dismissile:我會將它定義爲「支持庫中的nothing * defined *使用前綴」。就像你的代碼可以使用框架資源一樣,也可以支持庫。 – CommonsWare

+0

明白了,謝謝.. – Dismissile

相關問題