Android 冷兵器 之 tools

简介:

前言

Android开发在所难免的就是UI的预览和调整,一般情况下都是直接run看效果,或者是使用ASpreview预览,但这同样带来个小问题,就是你的测试内容会跟随着代码被打包到apk中,如果没做容错的处理很有可能将测试内容展示给用户。

还有就是像一些列表是不支持预览效果的,比如ListView

其实Android老早就有tools命名空间,作为一个开发快到一年的我,最近看到一篇文章才发现这个tools大用处,在此做个笔记。

直接看一下效果,最为清楚:

26d62c15b557262c6a10622adad09bc838575e02

XML中的代码区区几行,但是右侧的preview效果却很直接,还有就是这些数据并不会打到apk中,直接运行是没有任何效果的,这就是厉害之处!相关代码已提交到Github上: https://github.com/xiaweizi/AndroidToolsExample Android Tools

初步使用

既然是命名空间,那肯定就要在XML开头就要声明。

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

类似于

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

然后就可以使用tools的相关属性了。属性功能很多很全,我就介绍一下常用的,文尾会贴上相关的文章链接。

View 相关

先从view相关说起,在XMLviewandroid任意属性值,可以直接替换成tools,这样就可以实现实时的预览效果,并且正式部署之后不会展示。有点类似于dataBinding中的 default属性,以TextView为例。


//1. 原生
android:text="test text"
//2. databinding
android:text='@{viewModel.content, default="test text"}'
//3. tools
tools:text="test text"

preview的效果是一样的,不过除了 1 以外,其他运行效果是根据代码中设置的内容决定的,真正做到了测试预览。

之前也说了,view的其他属性它都支持。

context

通过

tools:context="com.xiaweizi.androidtoolsexample.CommonActivity"

的方式在根部局引用,主要的作用声明该布局文件默认关联的Activity,引号传Activity类的完整包名。随之就可以开启一些与其相关的特性。比如日常点击事件中,就可以直接在XML中声明onClick的方法名,然后会有错误的lint提示,需要你在Activity中创建改方法,跟随着AS的智能指引,便可创建对应的方法。点击事件的处理便可以放在里面。

showIn

tools:showIn="@layout/activity_other"

在使用include或者merge时,内层布局是预览不到外层的布局的。那通过showIn链接到外层布局,就可以直接连同外层布局一同展示出来。

d0c28ecd3a6816a74ab0f51a2e7bab79d2ce224e

layout

同样在XML中引用fragment布局也是预览不到效果的:

3827c40c294186bc24dcb550f2217b8e6249769e
那通过:


<fragment
android:id="@+id/fragment"
android:name="com.xiaweizi.androidtoolsexample.CommonFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/layout_fragment_test" />

的方式即可达到预览的效果。

e160cd1f97948097e350ef8a77770fdcb520f02f
进阶使用

tools除去上面的功能,更强大的在于支持列表的预览展示,也就是文章开头预览的效果,效果最明显的就是ListView

ListView

968b833d2056feb755b37f72c1fc49e6c33504a5

ListView 预览

// 1. 列表内容的布局
tools:listitem="@layout/list_content"
// 2. 头布局的预览展示
tools:listheader="@layout/list_header"
// 3. 脚布局的预览展示
tools:listfooter="@layout/list_footer"

一开始使用的时候发现不生效,后来发现需要给ListView设置id,就会立刻生效了。

GridView

c062400d9f7b9324ff433c660e685ae5592c20d4

同样也适用于GridView

RecyclerView

4f8cb5dbee3ef95497f6dfcf5db674b404ce86fe

说到RecyclerView一开始我以为只支持itemCount的设置,后来多谢以为小伙伴提的https://github.com/xiaweizi/AndroidToolsExample/issues/1 AndroidToolsExample/issues/1,我才发现可以支持复杂的列表展示!


// 1. 设置展示 item 的数量
tools:itemCount="6"
// 2. 设置布局方式 三种模式可以选择
// GridLayoutManager
// LinearLayoutManager
// StaggeredGridLayoutManager
tools:layoutManager="GridLayoutManager"
// 3. item 的布局
tools:listitem="@layout/list_content"
// 4 设置布局的方向
tools:orientation="horizontal"
// 5. 设置布局横、纵的列数
tools:spanCount="2"

sample

有人会好奇列表的数据哪来的,没看你设置,竟然能做到每条数据都不一样。客官别急,接下来就是介绍一下@tools:sample/*的强大功能,作为预览视图的占位数据。看一看官网的使用介绍。

31a965b92dc38c93103cf4de397e8b6c11c9aac0

各种类型的数据都支持构造,这里我以例子作为展示:

a65aca89460c142ce4012fc8bd86f949cefe29f4

每次使用,都会随机的更换不同的值,详情参见列表展示数据。

你以为这样就结束了吗?too young!除去原生给的数据支持,咱们也可以自己构造假的数据。

dd5147798c7553cd6af2c7fc02dea8c8ee7dfabd

直接可以创建sample data,然后就可以创建文本或者json数据。如果是json数据,你必须先运行一下才能使用。那看一下如何使用。

先创建json数据:


{
"data": [
{
"name": "张三",
"phone": "@tools:sample/us_phones",
"time": "@tools:sample/date/hhmmss",
"avatar": "@tools:sample/avatars"
},
{
"name": "李四",
"phone": "@tools:sample/us_phones",
"time": "@tools:sample/date/hhmmss",
"avatar": "@tools:sample/avatars"
},
{
"name": "赵五",
"phone": "@tools:sample/us_phones",
"time": "@tools:sample/date/hhmmss",
"avatar": "@tools:sample/avatars"
},
{
"name": "王二麻",
"phone": "@tools:sample/us_phones",
"time": "@tools:sample/date/hhmmss",
"avatar": "@tools:sample/avatars"
}
]
}

然后直接在XML中,通过@sample/的方式拿到数据。

41c01c3e0d0525e87efdd6baf1680e883992d46b

使用和预览正如上图所示。

总结

Get了该技能,不说有多大用处吧,至少可以提高开发效率,和减少把测试代码部署到线上的失误率吧,相信会帮助到你的!


原文发布时间为:2018-09-6

本文作者:下位子

本文来自云栖社区合作伙伴“安卓巴士Android开发者门户”,了解相关信息可以关注“安卓巴士Android开发者门户”。

相关文章
|
XML IDE 开发工具
android中tools的含义及用法
终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 第一部分 安卓开发中,在写布局代码的时候,ide可以看到布局的预览效果。
1415 0
|
开发工具 Android开发 开发者
|
XML Android开发 数据格式
|
Android开发 C++ 开发者
|
XML Android开发 数据格式
Android 开发之:Tools 属性
直到今天创建项目的时候, 出现tools:showIn="@layout/activity_main"才想起要学习记录下 Tools属性的相关使用。这个Tools 是如此好使用,我却未能善用,简直抱歉。
968 0
|
Ubuntu Java 开发工具
Android源码浅析(二)——Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境
<div class="markdown_views"> <h1 id="android源码浅析二ubuntu-rootgitvmware-tools安装输入法主题美化dock安装jdk和配置环境">Android源码浅析(二)——Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境</h1> <hr> <blockq
2292 0
|
Unix Android开发 机器学习/深度学习
Android development tools line_endings hacking
/******************************************************************** * Android development tools line_endings hacking * 说明: * 本文主要是对android源代码中的line_endings开发工具进行了解读, * 目的是为了知道传说中的dos,unix文件之间转换的工作机制。
675 0
|
Android开发 Linux
I.MX6 Android i2c-tools porting
/************************************************************************** * I.MX6 Android i2c-tools porting * 说明: * 判断I2C总线设备是否存在,每次都去查dmesg,实在是烦了,于是还是移植 * 一个i2c-tools比较好,不用翻那长长内核信息。
1190 0