xmlns:android="http://schemas.android.com/apk/res/android
什么是xmlns
xmlns,它是 XML 文档中的一个概念:英文叫做 XML namespace,中文翻译为 XML 命名空间。
一讲到命名空间,我想很多人会联想到C++中的namespace和Java中的 packagename,而这两者的作用都是为了解决命名上的冲突(例如类名,接口名等)。
类似的,XML namespace也是为了解决 XML 中元素和属性命名冲突,因为 XML 中的标签并不是预定义的,这一点与 HTML 是有区别的,HTML 中的标签是预定义的,所以我们会遇到命名冲突的问题。
XML 命名空间定义语法为xmlns:namespace-prefix=”namespaceURI”,一共分为三个部分:
- xmlns:声明命名空间的保留字,其实就是XML中元素的一个属性;
- namespace-prefix:命名空间的前缀,这个前缀与某个命名空间相关联;
- namespaceURI:命名空间的唯一标识符,一般就是一个URI引用。
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提供相关信息
使用到自定义View的xml布局文件
Android 自定义的xmlns其实很简单,语法规则是: xmlns:前缀=http://schemas.android.com/apk/res/你的应用程序包路径.
一般情况下,我们引用“apk/res-auto”就让app能够访问res下所有资源的能力,当然如果想让其只能访问某个res资源,只需要引用“包名/apk/res/具体属性文件夹”即可。
xmlns:tools的用法
在布局中,任意xml标签下添加代码:
xmlns:tools="http://schemas.android.com/tools"
之后,我们便能使用android为我们提供的tools,先举个开发过程中的案例:
有时候在布局一个xml的过程中需要查看某个TextView的文字效果,于是指定了android:Text =
“客户们都是笨蛋”;这时,产品上线,结果忘了删除这行代码,数据加载也没有重新设置text内容。
这种场面是不是就很尴尬了?使用tools标签就能够避免这样的尴尬,我们在xml布局中加入tools:text=”客户们都是笨蛋”,预览中就会显示出 客户们都是笨蛋
但实际上,如果运行的话,是看不到这条text的。
除此之外,tools:标签几乎支持所有android:的同名标签,比如tools:src、tools:textSize等,可以自己进行探索。
总之,tools的作用就是能够方便开发者在开发过程中提前预览xml布局而对之后的运行结果不产生影响,挺方便的一个工具。
参考:
http://www.jianshu.com/p/6fcaffaeffd2