今天来讲讲 Tools 属性,这里主要说一下我们在写布局时,利用 Tools 属性带来的便利
初识 Tools
想必不管是在看一些开源项目,还是自己写布局时,或多或少接触到过如下命名空间
1 | <RootTag xmlns:android="http://schemas.android.com/apk/res/android" |
xmlns:android
这个是默认的命名空间,而xmlns:tools
则是可有可无的,以前一直没去注意这个家伙到底有啥特别用途,只知道需要用到 tools:
属性时,就需要用到这个命名空间。
先来看一个 tools 的方便之处,我们在用 ListView 或者 RecyclerView 写布局时,一般都是等逻辑写好之后再运行去看效果,但是借助 tools:listitem
属性,我们可以直接在预览里头看效果
普通的布局文件
1 | <?xml version="1.0" encoding="utf-8"?> |
普通的预览效果
我们写一个自己的 item 布局
1 | <?xml version="1.0" encoding="utf-8"?> |
修改我们的普通的布局文件
1 | <?xml version="1.0" encoding="utf-8"?> |
再看效果
可以不用运行,就可以很便利的看到我们编写的效果。
还有一个好消息就是:tools 添加的属性,在构建项目的时候,会自动删除这些属性,对我们的 apk 大小没有任何影响。
一些 tools 属性
tools:ignore
这个属性可以让编译器忽略掉一些不必要的警告
1
<string name="show_all_apps" tools:ignore="MissingTranslation">All</string>
tools:targetApi
当你知道自己的布局肯定会运行在某一个版本之上时,可以用此属性来避免红色警告
1
2
3<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:targetApi="14" >tools:text
我们知道如果对 TextView 设置了 android:text ,在运行到手机上时会默认存在,如果只是想要预览效果,设置这个属性将是最佳选择
1
2
3
4
5
6<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
tools:text="hello" />tools:visibility
这个在预览的时候作用就大了,我们经常需要去改动来看预览效果,而直接改 android:visibility 最后都会作用在真机上
1
2
3
4
5
6
7<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
tools:visibility="visible"
tools:text="hello" />tools:itemCount
这个在列表用处明显,不足之处就是不像通用属性那样自动识别,需要自己打出完整的属性名
1
2
3
4
5<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:itemCount="3"
tools:listitem="@layout/item_demo" />tools:keep
这个主要用于打正式包时,一般我们打正式包都会对资源进行一些优化处理,此时一些没有被显式使用的资源将会被忽略,什么是显式呢,就是没有被布局文件直接引用或在代码直接引用的,而是通过
Resources.getIdentifier()
方式来使用的资源文件。这样在运行 app 的时候就会存在问题,而用 keep 属性就能保留那些文件1
2
3<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@layout/used_1,@layout/used_2,@layout/*_3" />
以上只是列举了一些个人觉得可以常用到的一些属性,还有很多其他属性,也都是很好用的,具体可以去官网查看
https://developer.android.com/studio/write/tool-attributes