㈠ 如何理解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引用。
通过上面的内容的讲解,我们对命名空间有了一定的了解,下面我们通过一个例子引用来说明一下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提供相关信息
㈡ 如何在AndroidStudio中新建xml文件夹
如下图所示,在res文件夹处右键单击,选择“new”,再选择“Androidresource directory ” :弹出对话框命名即可。
㈢ android中xml中有些控件的属性里面有 "app:.." ,此处的app:是什么意思和一般的android:有什么区别
xmlns:Android=”http://schemas.android.com/apk/res/android”
xmlns:app=”http://schemas.android.com/apk/res-auto”
xmlns:cutstom="http://schemas.android.com/apk/res/com.example.customview"
android 和 app 都是xml 里面的命名空间,android 是系统默认的,app是自定义的,你改成其它名字也可以,常用于自定义控件的自定义属性,res-auto会自动查找项目下的自定义属性,也可以在后面跟上包名
--------------------
<?xmlversion="1.0"encoding="utf-8"?>
<resources>
<!--这里的name跟xmlns里面的app没关系,只是在自定义view里面通过这个取自定义属性-->
<declare-styleablename="CustomText">
<attrname="tsize"format="dimension"/>
<attrname="tcolor"format="color"/>
</declare-styleable>
</resources>
---------------------
xmlns:app=”http://schemas.android.com/apk/res-auto”
<com.example.customview.CustomTextView
app:tsize="5dp"
android:text="123"
>
</com.example.customview.CustomTextView>