Android 冷兵器之 tools

前言

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

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

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

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

RecyclerView.gif

ListView 预览.png

GridView 预览.png

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

初步使用

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

xmlns:tools="http://schemas.android.com/tools"
复制代码

相似于测试

xmlns:android="http://schemas.android.com/apk/res/android"
复制代码

而后就可使用tools的相关属性了。属性功能不少很全,我就介绍一下经常使用的,文尾会贴上相关的文章连接。google

View 相关spa

先从view相关提及,在XMLviewandroid任意属性值,能够直接替换成tools,这样就能够实现实时的预览效果,而且正式部署以后不会展现。有点相似于dataBinding中的 default属性,以TextView为例。.net

//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连接到外层布局,就能够直接连同外层布局一同展现出来。

showIn

layout

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

无

那经过:

<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" />
复制代码

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

layout.png

进阶使用

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

ListView

ListView 预览.png

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

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

GridView

GridView 预览.png

一样也适用于GridView

RecyclerView

RecyclerView.gif

说到RecyclerView一开始我觉得只支持itemCount的设置,后来多谢觉得小伙伴提的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/*的强大功能,做为预览视图的占位数据。看一看官网的使用介绍。

sample

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

展现

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

你觉得这样就结束了吗?too young!除去原生给的数据支持,我们也能够本身构造假的数据。

sample data

直接能够建立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/的方式拿到数据。

最终预览

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

总结

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

感谢

tools 官方文档

命名空间介绍

tools 大有用处

相关文章
相关标签/搜索