A xmlns:android,这实际上是如何工作的?

A xmlns:android,这实际上是如何工作的?,android,xml,Android,Xml,考虑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

考虑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>
然后试图重新编译我的项目。我得到了这个结果:

-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值更改为其他不存在的资源又有什么关系呢?如果它确实存在,那么它在哪里?

它不是一种资源,它只是一种资源。通常,处理XML文件的进程需要一个特定的XML名称空间。使用名称空间时,就好像将属性重命名为其他属性一样。因此,使用它们的工具不再识别它们。

xmlns:android=”http://schemas.android.com/apk/res/android“
声明一个XML命名空间前缀
xmlns
表示它是关于名称空间声明的
android
是前缀<代码>http://schemas.android.com/apk/res/android是一个URI—一个唯一标识引用哪个命名空间的字符串。URI可以是抽象的(如本例所示);它不一定是一个实际定位某物的URL

通常,您可以自由选择实际前缀。你很有可能用别的东西取代安卓系统,它仍然可以工作

因此,该属性的实际含义是“我们需要使用名称空间
http://schemas.android.com/apk/res/android
在这里,在这个文件中,我们将把这个名称空间称为
android


如果在多个文件中,您使用相同的URI定义了不同的命名空间前缀,那么所有这些文件都将引用相同的命名空间-因为URI是相同的。前缀可以看作是引用实际命名空间的简写符号。前缀只能在定义它的文件中使用。

您说过属性意思是:“我们需要使用名称空间中的节点。”但这并不能解释从何处定义名称空间中的节点集。这正是我最困惑的地方。从纯XML的角度来看,URI不需要引用任何存在于任何地方的内容。您可以编写xmlns:rutski=“www.rutski.com“就XML而言,该文件是可以使用的。命名空间的存在允许您在其中放置节点。例如,android:orientation=“vertical”将方向属性放在android名称空间中。当文件由其他软件处理时(例如,根据模式进行验证),这一点变得重要。模式将被定义为期望XML文件中的节点驻留在给定的名称空间中,而这将是一个给定的名称空间。据我所知,实际上并不存在这样的模式。基本上,Android希望您将节点放置在该名称空间中。任何进一步处理检查/要求的程度完全取决于Android。“名称空间中的节点”-这意味着什么?我查找了它,但没有完全理解它——在根据模式验证XML实例时,XML实例引用了一个模式文件,该文件定义了有效性规则。模式文件反过来定义了一个目标名称空间。只有当XML实例的节点位于该目标命名空间中时,才会认为该实例有效。这就是我所说的节点“来自[android]名称空间”。
-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'