作为一名 Android 开发,我想大家对xmlns并不会陌生,因为在写布局文件(如下代码所示)的时候经常会碰到,虽然很多人对其含义并不是特别了解(比如说我)。好吧,今天我们就来挖一挖这神奇的xmlns

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/window_background">
</LinearLayout>

什么是xmlns

首先,我们先来看下到底什么是xmlns,它是 XML 文档中的一个概念:英文叫做 XML namespace,中文翻译为 XML 命名空间。一讲到命名空间,我想很多人会联想到C++中的namespaceJava中的 packagename,而这两者的作用都是为了解决命名上的冲突(例如类名,接口名等)。类似的,XML namespace也是为了解决 XML 中元素和属性命名冲突,因为 XML 中的标签并不是预定义的,这一点与 HTML 是有区别的,HTML 中的标签是预定义的,所以我们会遇到命名冲突的问题。

XML 命名空间定义语法为xmlns:namespace-prefix="namespaceURI",一共分为三个部分:

  • xmlns:声明命名空间的保留字,其实就是XML中元素的一个属性;
  • namespace-prefix:命名空间的前缀,这个前缀与某个命名空间相关联;
  • namespaceURI:命名空间的唯一标识符,一般就是一个URI引用。

通过上面的内容的讲解,我们对命名空间有了一定的了解,下面我们通过一个例子引用来说明一下xmlns属性是如何解决命名冲突的:


命名冲突
在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。这个 XML 文档携带着某个表格中的信息:

<table><tr><td>Apples</td><td>Bananas</td></tr>
</table>

这个 XML 文档携带有关桌子的信息:

<table><name>African Coffee Table</name><width>80</width><length>120</length>
</table>

假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的 <table> 元素,就会发生命名冲突。XML 解析器无法确定如何处理这类冲突。

使用命名空间(Namespace)
这个XML文档携带着某个表格中的信息:

<h:table xmlns:h="http://www.w3.org/TR/html4/"><h:tr><h:td>Apples</h:td><h:td>Bananas</h:td></h:tr>
</h:table>

此XML文档携带着有关一件家具的信息:

<f:table xmlns:f="http://www.w3school.com.cn/furniture"><f:name>African Coffee Table</f:name><f:width>80</f:width><f:length>120</f:length>
</f:table>

我们为<table>标签添加了一个xmlns属性,并在每个标签前面都添加了相应的前缀,这个前缀是一个与某个命名空间相关联的限定名称,这个前缀就代表后面那个 URI 引用,或者说一个缩写。

关于xmlns就先简单讲到这里,大家如果要深入了解的话,可以点击本文中的跳转链接,下一节我们来看下 Android 中的那些xmlns。

Android中的xmlns

在Android中,目前我们碰到的xmlns一共有三种:

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

android

命名空间android用于 Android 系统定义的一些属性。

app

命名空间app用于我们应用自定义的一些属性,这个与 Android 自定义属性和系统控件扩展应该有关系,大家可以再继续研究一下。

tools

根据官方定义,tools命名空间用于在 XML 文档记录一些,当应用打包的时候,会把这部分信息给过滤掉,不会增加应用的 size,说直白点,这些属性是为IDE提供相关信息。

如何理解Android中的xmlns相关推荐

  1. 【转】Android菜单详解——理解android中的Menu--不错

    原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...

  2. Android菜单详解——理解android中的Menu

    前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...

  3. 深入理解Android中View

    文章目录 [隐藏] 一.View是什么? 二.View创建的一个概述: 三.View的标志(Flag)系统 四.MeasureSpec 五.几个重要方法简介 5.1 onFinishInflate() ...

  4. 彻底理解 Android 中的阴影

    如果我们想创造更好的 Android App,我相信我们需要遵循 Material Design 的设计规范.一般而言,Material Design 是一个包含光线,材质和投影的三维环境.如果我们想 ...

  5. 彻底理解 Android 中的阴影 1

    如果我们想创造更好的 Android App,我相信我们需要遵循 Material Design 的设计规范.一般而言,Material Design 是一个包含光线,材质和投影的三维环境.如果我们想 ...

  6. android scroller,深入理解Android中Scroller的滚动原理

    View的平滑滚动效果 什么是实现View的平滑滚动效果呢,举个简单的例子,一个View从在我们指定的时间内从一个位置滚动到另外一个位置,我们利用Scroller类可以实现匀速滚动,可以先加速后减速, ...

  7. java中view是什么_深入理解Android中View

    文章目录 [隐藏] 这回我们是深入到View内部,去研究View,去了解View的工作,抛弃其他因素,以便为以后能灵活的使用自定义空间打下一定的基础.希望有志同道合的朋友一起来探讨,深入Android ...

  8. android view 绘制过程,深入理解Android中View绘制的三大流程

    前言 最近对Android中View的绘制机制有了一些新的认识,所以想记录下来并分享给大家.View的工作流程主要是指measure.layout.draw这三大流程,即测量.布局和绘制,其中meas ...

  9. Android 深入理解Android中的自定义属性

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/45022631: 本文出自:[张鸿洋的博客] 1.引言 对于自定义属性,大家肯定 ...

最新文章

  1. XDOC Office Server 开源了,Office文档完美转换为PDF
  2. ACE-Streams架构简介及应用
  3. 10个相见恨晚的 Java 在线练手项目
  4. ABAP UDO generation report
  5. Activity隐式启动IntentFilter
  6. delphi php 加密解密_如何恢复被MaMoCrypt勒索软件加密的数据
  7. 鞍部在哪里_智慧树知到在哪里可以寻找答案?
  8. 在 Windows 7 下手动删除驱动程序
  9. 计算机对口模拟试题,计算机专业对口升学模拟试题
  10. Oracle 同比环比
  11. PC端微信扫码支付二维码生成接口的调整
  12. java中定义数组的3种方式
  13. HashMap源码学习——初探
  14. 初探强化学习(14)DQN类算法的值高估问题的笔记
  15. 卡西欧计算机的型号配置,【卡西欧 CASIO fx-82CN X计算器使用总结】菜单|供电|设置|输入|运算_摘要频道_什么值得买...
  16. Vue 使用jsPlumb 实现连线绘图
  17. 简单五步看懂伦敦的银标
  18. java塑形是什么意思,健身中该减脂还是该塑形,所谓“塑形”是个什么概念?...
  19. 无人驾驶特斯拉如何布局?
  20. 树莓派开发—— wiringPi 库的使用

热门文章

  1. HALCON No finder pattern could be found错误解决
  2. Rabin-Karp算法 java_第 2 章 字符串
  3. 本周ASP.NET英文技术文章推荐[06/03 - 06/09]
  4. ArtemisMQ的“未消费之谜”
  5. iis重启的几种方法
  6. Oracle、SQL Server、MySQL分页方法
  7. android 中 webview 怎么用 localStorage?
  8. 029# Adempiere采购模组-从采购申请创建采购订单
  9. 把一个表中的数据插入到另一个表
  10. Spring boot 梳理 - WebMvcConfigurer接口 使用案例