美文网首页shmily-iOS/Mac
xml中的android、app、tools你真的了解吗

xml中的android、app、tools你真的了解吗

作者: 呱呱_ | 来源:发表于2018-04-16 00:43 被阅读0次

    在布局文件的编写中,我们经常在跟节点见到这几句代码:


    这是怎么样的三兄弟.png

    虽然经常见到,但从来没有好好的认识认识,今天我们就来简单的聊一下吧~

    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"详解

    相关文章

      网友评论

        本文标题:xml中的android、app、tools你真的了解吗

        本文链接:https://www.haomeiwen.com/subject/xmbrkftx.html