[英]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.