在布局文件的编写中,我们经常在跟节点见到这几句代码:
虽然经常见到,但从来没有好好的认识认识,今天我们就来简单的聊一下吧~
xmlns:android="http://schemas.android.com/apk/res/android"
- 首先我们要明白一点,xmlns是xml namespace的缩写,意思是xml命名空间。
- 那么我们就好理解这句话是什么意思了,声明这个命名空间引用的是Android系统的,而其中的android作为前缀,是这个引用别称的意思,当然我们也可以将它换成其他的名字。
- 后面schemas的意思是xml文件的约束(也就是xml的书写规范,类似于模板),还有一种xml约束是DTD,但schemas相对于DTD来说克服了DTD的局限性,扩展性强。
有了他,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中。
举个栗子:
假如我们要给一个按钮设置阴影效果,可是项目的minSdkVersion是19,于是我们就会看到下面这种情况:
提示我们elevation属性是从API 21才开始有的,可是当前的最小API只有19,于是我们可以根据提示:
-
使用tools:ignore="UnusedAttribute",忽略警告:
-
使用tools:targetApi="lollipop",告诉IDE这个是属性是针对android 5.0及以上的:
虽然上面这两种做法都没有再报语法错误,可是并没有解决实际问题,打擦边球并不是最好的解决方法。
-
所以我们可以使用support的命名空间,support包可以为低版本的用户做一些扩充支持:
这样我们就很好的解决所有问题了,既不会报错,也能够使高低版本得到相同的显示效果。
-
至于tools的用法也有很多,如最常用的预览效果:
打包运行的时候并无影响,是不会看到这段文字的,仅限于IDE的预览效果~
tools的更多用法,及本文的参考文章在:
android中xml tools属性详解
xmlns:android="http://schemas.android.com/apk/res/android"详解