簡體   English   中英

一個xmlns:android,這實際上是如何工作的?

[英]A xmlns:android, how does that actually work?

考慮android上的以下完美格式的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Hello World, PurpleActivity"/>
</LinearLayout>

我看着這個並對ULR感到好奇: http//schemas.android.com/apk/res/android 因此,我嘗試將其輸入到我的Web瀏覽器的地址欄中,並嘗試通過CURL獲取它,但兩種方法都顯示它實際上並不存在。 我在本地機器上的android-sdk文件夾中尋找類似於apk / res / android目錄的東西,但搜索結果也沒有。 所以,我想,因為這個資源實際上並不存在,也許我可以將xmlns:android行改為我想要的任何東西。 我繼續把它改成了

http://schemas.android.com/apk/res/androidASDFASDFASDFASDFLKJSDFLEIE

然后嘗試重新編譯我的項目。 我得到了這個結果:

-resource-src:
     [echo] Generating R.java / Manifest.java from the resources...
     [aapt]     (skipping hidden file '/Users/rutski/Desktop/purple/res/layout/.#main.xml')
     [aapt] /Users/rutski/Desktop/purple/res/layout/main.xml:2: error: No resource identifier found for attribute 'orientation' in package 'androidASDFASDFASDFASDFLKJSDFLEIE'
     [aapt] /Users/rutski/Desktop/purple/res/layout/main.xml:2: error: No resource identifier found for attribute 'layout_width' in package 'androidASDFASDFASDFASDFLKJSDFLEIE'
     [aapt] /Users/rutski/Desktop/purple/res/layout/main.xml:2: error: No resource identifier found for attribute 'layout_height' in package 'androidASDFASDFASDFASDFLKJSDFLEIE'
     [aapt] /Users/rutski/Desktop/purple/res/layout/main.xml:7: error: No resource identifier found for attribute 'layout_width' in package 'androidASDFASDFASDFASDFLKJSDFLEIE'
     [aapt] /Users/rutski/Desktop/purple/res/layout/main.xml:7: error: No resource identifier found for attribute 'layout_height' in package 'androidASDFASDFASDFASDFLKJSDFLEIE'
     [aapt] /Users/rutski/Desktop/purple/res/layout/main.xml:7: error: No resource identifier found for attribute 'text' in package 'androidASDFASDFASDFASDFLKJSDFLEIE'

這讓我感到困惑。 如果資源不存在,那么如果我將xmlns:android值更改為其他一些不存在的資源有什么關系呢? 如果確實存在,那么它在哪里?

xmlns:android="http://schemas.android.com/apk/res/android"聲明XML名稱空間前綴。 xmlns表示它是關於命名空間聲明的。 android是前綴。 http://schemas.android.com/apk/res/android是一個URI - 一個唯一標識所引用名稱空間的字符串。 URI可以是抽象的東西(如本例所示); 它不一定是物理定位的URL。

通常,您可以自由選擇實際前綴。 你很可能用其他東西替換android ,它仍然可以工作。

那么該屬性實際上意味着“我們需要使用命名空間http://schemas.android.com/apk/res/android節點,在這個文件中,我們將把這個命名空間稱為android

如果在幾個文件中使用相同的URI定義不同的名稱空間前綴,則所有這些文件都將引用相同的名稱空間 - 因為URI是相同的。 前綴可以看作是用於引用實際命名空間的簡寫符號。 前綴只能在定義它的文件中使用。

它不是資源,只是一個URI 通常,使用XML文件的進程需要特定的XML命名空間。 當您使用命名空間時,就像將屬性重命名為其他內容一樣。 因此,與它們一起工作的工具不再能識別它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM