2011-08-19 26 views

回答

97

在XML,XMLNS聲明瞭一個命名空間。事實上,當你這樣做:

<LinearLayout android:id> 
</LinearLayout> 

與其說android:id的,XML將使用http://schemas.android.com/apk/res/android:id是唯一的。通常這個頁面不存在(它是一個URI,而不是一個URL),但有時它是一個解釋使用的名稱空間的URL。

命名空間具有幾乎相同的用途作爲Java應用程序包的名稱。

Here是一個解釋。

統一資源標識符(URI)

統一資源標識符(URI)是個字符的字符串,其 標識互聯網資源。

最常見的URI是統一資源定位符(URL),其 識別的因特網域地址。另一種不常見的類型是URI是通用資源名稱(URN)。

在我們的例子中,我們將只使用網址。

+11

那麼爲什麼我們有'android:layout_width'而不是'layout_width'? – Shashwat

+4

那麼我們如何使用「LinearLayout」而不是「android:LinearLayout」? –

+0

可能因爲LinearLayout是根名稱空間的一部分,並且android:xxx屬性是子名稱空間的一部分(「http://schemas.android.com/apk/res/android/android/id」) – NitroG42

20

的xmlns指XML namespace

當使用XML前綴爲前綴所謂的命名空間中必須定義。名稱空間由元素的開始標記中的xmlns屬性定義。命名空間聲明具有以下語法。的xmlns:前綴= 「URI」。

注意:分析器不使用命名空間URI來查找信息。

的目的是給命名空間的唯一名稱。但是,公司通常使用名稱空間作爲指向包含名稱空間信息的網頁的指針。

20

要理解爲什麼xmlns:android=「http://schemas.android.com/apk/res/android」必須是第一個在佈局XML文件中,我們將使用一個例子

Sample ::

瞭解部件
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/container" >  
</FrameLayout> 

Uniform Resource Indicator(URI)

  • 在計算中,統一資源標識符(URI)是用於標識一個資源的名稱 字符的字符串。
  • 這樣的標識使得能夠使用特定的 協議在網絡(通常是萬維網)上與資源的表示進行交互。

例:http://schemas.android.com/apk/res/android:id是URI這裏


XML Namespace

  • XML命名空間用於在XML文檔中提供唯一命名的元素和屬性 。 xmlns:android描述了android 命名空間。
  • 它是這樣使用的,因爲這是由谷歌設計的選擇, 在編譯時處理錯誤。
  • 還假設我們寫我們自己的textview部件具有不同的 功能相比,Android的textview,Android的命名空間有助於 區分我們的定製textview部件和Android textview部件
+6

這個答案真的值得閱讀,與上面那些沒有明確解釋「爲什麼?」相比, – eRaisedToX

+0

你說的是「這樣的識別能夠與r進行交互通過網絡(通常是萬維網)使用特定協議介紹資源。 例如:http://schemas.android.com/apk/res/android:id是這裏的URI「 - 但是如果我沒有互聯網連接,這個android名字空間如何通過網絡與資源進行交互? – kavie

4

之間這僅僅是XML命名空間聲明。我們使用這個名稱空間來指定下面列出的屬性屬於Android。因此,他們以「android:

開頭。實際上,您可以創建自己的自定義屬性。因此,爲了防止名稱衝突,其中2個屬性命名爲相同的事物,但行爲不同,我們添加前綴「android:」來表示這些屬性是Android屬性。

因此,此名稱空間聲明必須包含在XML文件的根視圖的開始標記中。

1

在XML中,元素名稱由開發人員定義。當嘗試混合來自不同XML應用程序的XML文檔時,這通常會導致衝突。用戶或XML應用程序將不知道如何處理這些差異。使用名稱前綴可以輕鬆避免XML中的名稱衝突。在XML中使用前綴時,必須定義前綴的命名空間。命名空間可以由元素的開始標記中的xmlns屬性定義。命名空間聲明具有以下語法。的xmlns:前綴= 「URI」。

1
  • Xmlns表示xml命名空間。
  • 它是爲避免xml中的命名衝突而創建的。
  • 爲了避免以任何其他方式命名衝突,我們需要爲每個元素提供前綴。
  • 爲了避免在每個xml標籤中重複使用前綴,我們在xml的根目錄下使用了xmlns。因此,我們有標籤的xmlns:安卓=」 http://schemas.android.com/apk/res/android
  • 現在這裏的android 簡單意味着我們正在分配命名空間‘http://schemas.android.com/apk/res/android’給它。
  • 該命名空間不是一個URL,而是一個URI,也被稱爲URN(通用資源名稱),它很少用來代替URI。
  • 由於這個android將負責識別xml文檔中的android相關元素,這將是android:xxxxxxx等。如果沒有這個名稱空間,android:xxxxxxx將不會被識別。

擺在外行的術語:

沒有的xmlns:安卓=」 http://schemas.android.com/apk/res/android」機器人相關的標記不會我們的佈局的XML文檔中予以確認。

-1

它是一個XML名稱空間聲明,用於指定視圖組中與其相關的屬性與android相關。

+0

請詳細說明 –

1
xmlns:android="http://schemas.android.com/apk/res/android" 

這是xmlns:android =「@ +/id」的形式。現在refernce它我們使用例如

android:layout_width="wrap_content" 
android:text="Hello World!" 

另一個的xmlns是

xmlns:app="http://schemas.android.com/apk/res-auto" 

其是XMLNS的形式:應用= 「@ +/id」 和下面

app:layout_constraintBottom_toBottomOf="parent" 
app:layout_constraintLeft_toLeftOf="parent" 
其使用給定的
1

我認爲它清楚地說明了命名空間,因爲我們可以創建自己的屬性,並且如果用戶指定的屬性與Android相同,它就避免了命名空間的衝突。

相關問題