赞
踩
转载自http://blog.sina.com.cn/s/blog_a28e3dd90102uxmc.html
Android的xmlns,这个是XML Namespaces的缩写,中文名称是XML(标准通用标记语言的子集)命名空间 。
首先是命名空间 Namespace这个概念,我们在学习C++和C#的时候,记得都有使用到这个东西,首先命名空间是用来组织和重用代码的编译单元。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了,为了解决这个问题,引入了名字空间这个概念,通过使用 namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的,这样一来就不会引起不必要的冲突了。
在C++代码里我们总会看到这样的一句代码在整个文件的头部位置“using namespace std”,这表示的是该文件使用的是标准C++库中定义的名称为std的命名空间中的标识符;同样在C#中我们会用到using system来引用系统的命名空间,来使用int、bool这些标识符。而在Java里面,我们使用的都是class,而且同一个包名下的class不能重名,那基本上和命名空间的处理相似,但却不是命名空间这个概念,import对应的packages来实现对应的class的调用。
那我们今天讲到的Android命名空间的概念不是基于Java的而是对应xml文件来说的,也就是xmlns这个,我们随便打开一个Android工程的xml文件看到最多的是下面这代码“<问号xml version="1.0" encoding="utf-8"问号>”(由于新浪博客这边的显示问题我把“?”换成了问号中文字符)这行代码告诉我们的是一个版本是1.0,使用的字符编码为UTF-8。还有我们在layout文件中见到最多就是如下的这句代码,在初学Android的时候我估计百分之六十以上的同学没有注意到这个内容到底是干嘛的,只知道这样写就对了,就可以编译通过了,但并不知道这样的一句代码表示的什么意思。那我说的这句代码究竟是哪句呢?xmlns:android="http://schemas.android.com/apk/res/android" 就是这一句代码,我们都知道这样去用它,但实际上这一句的含义是什么?首先我们知道xmlns这个是xml命名空间的意思,这一句代码的意思也就是android这个xml命名空间的资源路径在如下的这里路径“http://schemas.android.com/apk/res/android”。那这个路径代表的究竟又是什么意思?首先http://schemas.android.com/apk/res/这是res资源的标准前缀,后面的这个android是一个包名。也就是我们使用android命名空间的资源定义的路劲在android这个包名之下。那后面我们通过android引出的属性,例如一个textview的text值我么直接就可以通过一下的代码进行设置了,如android:text="@string/lostworld"来进行设置了。那这样就很容易设置对应的那些值了。