Android 冷兵器 之 tools
前言
Android
开发在所难免的就是UI
的预览和调整,一般情况下都是直接run
看效果,或者是使用AS
的preview
预览,但这同样带来个小问题,就是你的测试内容会跟随着代码被打包到apk
中,如果没做容错的处理很有可能将测试内容展示给用户。
还有就是像一些列表是不支持预览效果的,比如ListView
。
其实Android
老早就有tools
命名空间,作为一个开发快到一年的我,最近看到一篇文章才发现这个tools
大用处,在此做个笔记。
直接看一下效果,最为清楚:
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
相关说起,在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
的设置,后来多谢以为小伙伴提的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/*
的强大功能,作为预览视图的占位数据。看一看官网的使用介绍。
各种类型的数据都支持构造,这里我以例子作为展示:
每次使用,都会随机的更换不同的值,详情参见列表展示数据。
你以为这样就结束了吗?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了该技能,不说有多大用处吧,至少可以提高开发效率,和减少把测试代码部署到线上的失误率吧,相信会帮助到你的!
原文发布时间为:2018-09-6
本文作者:下位子
本文来自云栖社区合作伙伴“安卓巴士Android开发者门户”,了解相关信息可以关注“安卓巴士Android开发者门户”。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android笔记(一) | Activity的生命周期
下文将分两部分来讨论Activity的生命周期,参照任玉刚老师的《Android开发艺术探索》一书,结合所学进行总结扩充。 典型情况下的生命周期 异常情况下的生命周期 典型情况下的生命周期 下图表示正常情况下Activity的生命周期过程。 image.png 下面是7个生命周期: /* onCreate: * 表示Activity正在被创建,执行一些初始化工作 * (如:调用 setContentView 加载界面布局资源,初始化Activity所需数据等); */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } /* onStart: * 表示Activity正在被启动,这时Activity已经可见(对应用可见), * 只不过还在后台,用户还看不到; */ @Override protected void onStart() { super.onStart(); } /* onResume: * 表示Activity已经出现在前台...
- 下一篇
Android面试题库 - Service(一) - 基础
Service应用场景、与Thread的区别 Service是什么 Service是一个一种在后台长时间执行操作而有没有用户界面的应用组件。 Service与Thread的区别 Thread 最小的运行单元,可以用来执行耗时操作 Service 运行在主线程,不能做耗时操作 ANR 时间20s Service的两种启动方式 两种启动方式说明 启动 当应用组件(如 Activity)通过调用 startService() 启动服务时,服务即处于“启动”状态。一旦启动,服务即可在后台无限期运行,即使启动服务的组件已被销毁也不受影响。 已启动的服务通常是执行单一操作,而且不会将结果返回给调用方。例如,它可能通过网络下载或上传文件。 操作完成后,服务会自行停止运行。 绑定 当应用组件通过调用 bindService() 绑定到服务时,服务即处于“绑定”状态。绑定服务提供了一个客户端-服务器接口,允许组件与服务进行交互、发送请求、获取结果,甚至是利用进程间通信 (IPC) 跨进程执行这些操作。 仅当与另一个应用组件绑定时,绑定服务才会运行。 多个组件可以同时绑定到该服务,但全部取消绑定后,该服务...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,CentOS7官方镜像安装Oracle11G
- Windows10,CentOS7,CentOS8安装Nodejs环境