为什么这一行 xmlns: android = “ http://schemas.android.com/apk/res/android”必须是布局 xml 文件中的第一行?

为什么在 xml 布局文件中需要这一行?

xmlns:android="http://schemas.android.com/apk/res/android"
233677 次浏览

在 XML 中,xmlns 声明了一个命名空间:

<LinearLayout android:id>
</LinearLayout>

Xml 不调用 android:id,而是使用 http://schemas.android.com/apk/res/android:id使其惟一。通常这个页面不存在(它是一个 URI,而不是一个 URL) ,但有时它是一个 URL,用于解释所使用的名称空间。

名称空间的用法与 Java 应用程序中的包名几乎相同。

这里 是一个解释。

统一资源标志符(URI)

统一资源标志符(URI)是一个字符串 识别互联网资源。

最常见的 URI 是统一资源定位符(URL) 标识一个互联网域名地址 URI 是通用资源名(URN)。

在我们的示例中,我们将只使用 URL。

Xmlns 引用 XML 名称空间

在 XML 中使用前缀时,必须为前缀定义所谓的命名空间。名称空间由元素开始标记中的 xmlns 属性定义。命名空间声明具有以下语法。前缀 = “ URI”。

注意 : 解析器不使用名称空间 URI 查找信息。

其目的是为命名空间提供一个唯一的名称。然而,公司经常使用名称空间作为指向包含名称空间信息的网页的指针。

xmlns:android

定义 Android 名称空间。此属性应始终设置为“ http://schemas.android.com/apk/res/android”。

请参阅 https://developer.android.com/guide/topics/manifest/manifest-element#nspace

xmlns:android这是在 Android 中定义 Android 名称空间的开始标记。这是由 android 谷歌开发者定义的标准惯例。当使用和布局默认值或自定义时,则必须使用此命名空间。

定义 Android 名称空间。此属性应始终设置为“ http://schemas.android.com/apk/res/android”。

<manifest>元素文档

为了理解为什么 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>

统一资源指标(URI) :

  • 在计算中,一个统一资源标志符(URI)是一个字符串 用于标识资源名称的字符。
  • 这种标识允许与 通过网络(通常是万维网)使用特定的 协议。

例: http://schemas.android.com/apk/res/android:id是这里的 URI


XML 命名空间 :

  • XML 命名空间用于提供唯一命名的元素和 属性。 xmlns:android描述了 android 命名空间。
  • 它这样使用,因为这是谷歌的设计选择 在编译时处理错误。
  • 另外,假设我们编写自己的 textview小部件时使用不同的 与 android textview相比,android 名称空间有助于 区分我们的自定义 textview小部件和 android textview小部件

这只是 XML 名称空间声明。我们使用这个名称空间是为了指定下面列出的属性属于 Android。因此,他们从“ 机器人:”开始

您实际上可以创建自己的自定义属性。因此,为了防止两个属性命名相同但行为不同的名称冲突,我们添加前缀“ 机器人:”来表示这些属性是 Android 属性。

因此,此 Name Space 声明必须包含在 XML 文件根视图的开始标记中。

在 XML 中,元素名由开发人员定义。当试图混合来自不同 XML 应用程序的 XML 文档时,这通常会导致冲突。用户或 XML 应用程序将不知道如何处理这些差异。使用名称前缀可以很容易地避免 XML 中的名称冲突。在 XML 中使用前缀时,必须定义前缀的命名空间。名称空间可以由元素开始标记中的 xmlns 属性定义。命名空间声明具有以下语法。前缀 = “ URI”。

  • Xmlns 表示 xml 命名空间。
  • 它的创建是为了避免 xml 中的命名冲突。
  • 为了避免以任何其他方式命名冲突,我们需要为每个元素提供一个前缀。
  • 为了避免在每个 xml 标记中重复使用前缀,我们在 xml 的根目录中使用 xmlns。因此,我们有标签 返回文章页面安卓 http://schemas.android.com/apk/res/android :
  • 现在,机器人在这里只是意味着我们将名称空间“ http://schemas.android.com/apk/res/android”分配给它。
  • 这个名称空间不是一个 URL,而是一个 URI,也称为 URN (通用资源名) ,它很少用来代替 URI。
  • 由于这一点,android 将负责识别 xml 文档中与 android 相关的元素,这些元素将是 android: xxxxxx 等等。如果没有这个名称空间 android: xxxxxxx 将无法识别。

用外行人的话说:

没有 xmlns: android = “ http://schemas.android.com/apk/res/android”android 相关标记将无法在我们的布局的 xml 文档中识别。

它是一个 XML 名称空间声明,目的是指定视图组中与其减速相关的属性是与 android 相关的。

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

这是 xmlns 的形式: android = “@+/id”

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

另一个是

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

其格式为 xmlns: app = “@+/id”,其用法如下

 app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"

我认为名称空间很清楚,因为我们可以创建自己的属性,如果用户指定的属性与 Android 的属性相同,就可以避免名称空间的冲突。

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

Xmlns : 是 xml 名称空间 而 网址:http://schemas.android.com/apk/res/android”只是

XSD 是[ XML 模式定义] : 用于定义 XML 文件的规则。

例如:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">


<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:hint="User Name"
/>
</LinearLayout>

让我解释一下 什么样的规则?

  1. 在上面的 XML 文件中,我们已经定义了我们的布局的布局宽度,如果你第二次定义相同的属性,你会得到一个错误。
  2. EditText 是存在的,但是如果您想添加另一个 EditText,则没有问题。

这类规则在 XML XSD 中定义: “ http://schemas.android.com/apk/res/android

有点晚了,但我希望这能帮到你。

上面的答案中没有重点,

当我们在 xml 文件的根目录中声明 xmlns: android = “ http://schemas.android.com/apk/res/android”时,将导入已经附加到这个名称空间的所有属性和标记。

所以下次我们给 android 的时候: 会出现自动完成列表。