Android 冷兵器 之 tools
前言
Android开发在所难免的就是UI的预览和调整,一般情况下都是直接run看效果,或者是使用AS的preview预览,但这同样带来个小问题,就是你的测试内容会跟随着代码被打包到apk中,如果没做容错的处理很有可能将测试内容展示给用户。
还有就是像一些列表是不支持预览效果的,比如ListView。
其实Android老早就有tools命名空间,作为一个开发快到一年的我,最近看到一篇文章才发现这个tools大用处,在此做个笔记。
直接看一下效果,最为清楚:



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

初步使用
既然是命名空间,那肯定就要在XML开头就要声明。
xmlns:tools="http://schemas.android.com/tools"
类似于
xmlns:android="http://schemas.android.com/apk/res/android"
然后就可以使用tools的相关属性了。属性功能很多很全,我就介绍一下常用的,文尾会贴上相关的文章链接。
View 相关
先从view相关说起,在XML中view的android任意属性值,可以直接替换成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链接到外层布局,就可以直接连同外层布局一同展示出来。

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" />
的方式即可达到预览的效果。

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

// 1. 列表内容的布局
tools:listitem="@layout/list_content"
// 2. 头布局的预览展示
tools:listheader="@layout/list_header"
// 3. 脚布局的预览展示
tools:listfooter="@layout/list_footer"
一开始使用的时候发现不生效,后来发现需要给
ListView设置id,就会立刻生效了。
GridView

同样也适用于GridView。
RecyclerView

说到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/*的强大功能,作为预览视图的占位数据。看一看官网的使用介绍。

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

每次使用,都会随机的更换不同的值,详情参见列表展示数据。
你以为这样就结束了吗?too young!除去原生给的数据支持,咱们也可以自己构造假的数据。

直接可以创建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了该技能,不说有多大用处吧,至少可以提高开发效率,和减少把测试代码部署到线上的失误率吧,相信会帮助到你的!
感谢
Android 冷兵器 之 tools
注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权
Android 冷兵器 之 tools的更多相关文章
- 在android下使用i2c tools
		
在android使用i2c tools访问i2c,很方便,可以在https://launchpad.net/ubuntu/+source/i2c-tools 下载最新的i2c tools. 把i2c- ...
 - Android被忽略的tools
		
自动生成的布局xml文件,很多都带有tools字样:但是大部分都被我们删除了: 其实它的作用是让我们这些开发者预览用的,十分的方便: 事例一个TextView: <TextView androi ...
 - Android studio Suggestion: use tools:overrideLibrary=”jp.wasabeef.blurry” to force usage
		
异常提示: 应用在Android Studio Build的时候,抛出了如下异常: Error:Execution failed for task ‘:app:processDebugManifest ...
 - ZH奶酪:Ubuntu14.04 安装Android SDK(SDK tools only)
		
1.安装JDK(我安装的是Oracle的,而不是openjdk) jdk目录:usr/lib/jvm/java-7-oracle/bin/java 2.下载Android-SDK,在下边的网页选择对应 ...
 - 解决 Android Studio 报SDK tools directory is missing
		
问题描述: 因为之前已经有安装过sdk manager,在设置中将Android SDK Location设置为Android SDK安装的目录之后还是一直报SDK tools directory i ...
 - android开发 兵器
		
spring for android andriod anotatons 按android原生的方式写代码,会导致冗余,代码丑陋,开发效率低下. 最近对项目代码进行一些梳理和改进.
 - 关于一些Android冷知识
		
1. 在Android4.0以后,EditText就由以前的输入框变成了一条划线的输入方式,如需要变为老版本的,只需在layout里面引入代码: android:background="@a ...
 - android中xml tools属性详解
		
第一部分 安卓开发中,在写布局代码的时候,ide可以看到布局的预览效果. 但是有些效果则必须在运行之后才能看见,比如这种情况:TextView在xml中没有设置任何字符,而是在activity中设置了 ...
 - android中xmlns:tools属性详解
		
今天读到一篇总结的非常棒的文章,写的逻辑很清晰也很实用,很少见到如此棒的文章了.就原文转发过来,我把格式给整理了一下,分享给园子里的各位朋友!好久没写博客了,就为2015年的11月留份纪念吧.希望对你 ...
 
随机推荐
- 再议gluPerspective和gluLookAt的关系
			
http://www.cnblogs.com/chengmin/archive/2011/09/12/2174004.html 看了Opengl的相关程序,发现有些东西还是特别迷茫,尤其是gluLoo ...
 - SPI总线介绍
			
1. 简介 SPI, Serial Peripheral Interface, 串行外设接口, 是一种高速的.全双工.同步的通信总线SPI在芯片的管脚上只占用四根线 SPI接口主要用于MCU与各种外围 ...
 - VS程序打包软件
			
由于InstallShield Limited Edition for Visual Studio的教程.资料太少,所以我今天才决定写这个文章,专门针对C#项目打包,包括打包集成Microsoft . ...
 - Linux内核之页面换出详解
			
kswap线程主要用于页面的定期换出,接下来说说kswap线程的实现 首先kswap线程的初始化时,需要根据物理内存的大小设置一个page_cluster变量的值,这个值表示预读数目 (比如本来只读一 ...
 - 配置Nginx来支持php
			
安装php7 下载地址:https://secure.php.net/downloads.php这里下载的是:wget http://ar2.php.net/distributions/php ...
 - 在floodlight源码的基础上添加一个新的module并正确运行
			
1.在src/main/java目录下新建一个package,目录结构如下: 2.在新建的package下,新建一个class,名字就是自定义的module,接下来implements想实现的serv ...
 - windows下利用线程池完成多任务的分配和运行
			
在做项目的过程中有时候为了提升效率,用了多线程的方法来对任务进行分割和应用,后来发现,采用线程池的方法能更好的利用线程资源来计算任务,网上有很多关于如何运行线程池的例子,msdn上也给出了对应的例子: ...
 - mogilefsd同步速度调优
			
#查看主从mogadm settings list #一点点调试mogadm settings listmogadm settings set internal_queue_limit 500moga ...
 - Git-添加或删除文件
			
添加文件 $ git add blash $ git commit "add blash file" $ git push -u origin master 删除文件 $ gi ...
 - 使用bottle进行web开发(1):hello world
			
为什么使用bottle?因为简单,就一个py文件,和其他模块没有依赖,3000多行代码. http://www.bottlepy.org/docs/dev/ 既然开始学习,就安装它吧. pip3 in ...