android:xmlns

xmlns:首先我们要明白一点,xmlns是xml namespace的缩写,意思是xml命名空间。

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

  • 那么我们就好理解这句话是什么意思了,声明这个命名空间引用的是Android系统的,而其中的android作为前缀,是这个引用别称的意思,当然我们也可以将它换成其他的名字。整句话的作用是声明命名空间的引用。

  • 后面schemas的意思是xml文件的约束(也就是xml的书写规范,类似于模板),还有一种xml约束是DTD,但schemas相对于DTD来说克服了DTD的局限性,扩展性强。

  • xmlns:android中的android是给引用起的名字,这样就可以用android:XXX="......"形式进行操作。这个是可以换成别的名称而不用 android

    例如:声明变为:xmlns:myname="http://schemas.android.com/apk/res/android"。后面的操作就要改为 myname:XXX="......"的形式,这也就是自定义xmlns。

有了xmlns:android,Android Studio就会在我们编写布局文件的时候给出提示,提示我们可以输入什么,不可以输入什么。也可以理解为语法文件,或者语法判断器。

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

  • 在项目需求中,我们往往使用系统自带的属性以及控件是不够的,我们可能需要导入自定义控件的一些属性,或者support支持包之类的。

  • 为了引入自定义的属性,我们可以xmlns:前缀=http://schemas.android.com/apk/res/你的应用程序包路径,将其导入。

  • 但现在的普遍做法是使用xmlns:app="http://schemas.android.com/apk/res-auto",因为res-auto可以引用所有的自定义包名。

xmlns:tools="http://schemas.android.com/tools"

  • tools顾名思义是工具的意思,可是我们使用这个命名空间能带来什么效果呐。

  • tools可以告诉Android Studio,哪些属性在运行的时候是被忽略的,只在设计布局的时候有效。

  • tools可以覆盖android的所有标准属性,将android:换成tools:即可;同时在运行的时候就连tools:本身都是被忽略的,不会被带进apk中。

若有属性是从API xx才开始有的,可是当前的最小API只有19,于是我们可以根据提示:

  使用tools:ignore="UnusedAttribute",忽略警告;

  使用tools:targetApi="lollipop",告诉IDE这个是属性是针对android 5.0及以上的;

    虽然上面这两种做法都没有再报语法错误,可是并没有解决实际问题,打擦边球并不是最好的解决方法。

    所以我们可以使用support的命名空间,support包可以为低版本的用户做一些扩充支持:

  • 打包运行的时候并无影响,是不会看到这段文字的,仅限于IDE的预览效果

猜你喜欢

转载自www.cnblogs.com/hugeba/p/12554580.html
今日推荐