用过 Sketch 的朋友应该都知道一个叫 Mirror 的功能,它可以将你的设计稿放到手机上预览,为设计师们提高了不少效率。而今天我要介绍的 jimu Mirror ,和 Sketch Mirror 类似,可以将 Android 的 xml 实时放到手机上预览。但是现代化的 IDE 都已经提供在 IDE 内实时预览 xml 的功能,**jimu Mirror** 有啥用呢?

有用!还是相当有用! 本文将以微信的界面作为参考,在不写一句 Java 代码的情况下,轻松实现微信的几个界面。


安装 jimu Mirror

jimu Mirror 支持 Android Studio / IDEA,本文将以 Android Studio 作为开发环境,读者请自行下载对应版本。

http://jimulabs.com/mirror-downloads/

将插件下载下来后,在 Android Studio 菜单进行简单操作,即可安装。

Configure -> Plugins -> install plugin from disk

没什么意外的话,你应该就能看见 Mirror 的小图标了。:)


配置 jimu Mirror

如果你使用的是 Android Studio,恭喜你,你什么都不用做,把手机接上电脑就可以了!如果你是其它 IDE,请查看官方文档。


基本操作

首先,将 Android Studio 的 Project 面板从 Android 切换到 Project,这样我们就能观察所有文件的变化;

再通过菜单,将 Mirror 的 Console 打开,这样我们就能观察 Mirror 的运行情况;

最后点一下「Start/Stop Mirror」的小图标,把 Mirror 跑起来,如无意外,Project 下会生成一个 app/mirror 的目录,同时你的手机应该会跑起 jimu Mirror 的主程序。


编写「聊天」列表界面

先新建两个 layout,一个放 ListView 一个放 ListView Item。

  • fragemnt_messages.xml
  • list_item_message.xml

往 fragment_messages.xml 增加一个 ListView,代码大概如下:

<LinearLayout><ListView...android:id="@+id/listView"/>
</LinearLayout>

然后往 list_item_message.xml 添加所需要的控件,例如放置头像的 ImageView,放置昵称的 TextView。

<LinearLayout><ImageView...android:id="@+id/avatar"/><TextView...android:id="@+id/name"/><TextView...android:id="@+id/content"/><TextView...android:id="@+id/time"/>
</LinearLayout>

按下「保存」按钮,可以看到在 Mirror 的 Console 里有新的输出,它为刚才修改的文件生成了新的 mirror 数据文件。

Mirror XML 简介

打开 app/mirror 下的 list_item_message.xml,可以看到如下 XML 代码:

<screen><_content layout="@layout/list_item_message"><!-- ImageView Examples:<avatar src="@drawable/image_resource" /><avatar src="relative_path/image.jpg" /> --><avatar /><!-- TextView Examples:<name text="@string/string_resource" /><name text="Text literal" textSize="14sp" /> --><name /><content /><time /></_content>
</screen>

我们在 layout 中 ID 为 avatar 的 ImageView,在 Mirror 的数据文件里被 <avatar/> 闭合所定义,我们可以在闭合内设置 avatar 的属性,例如我要给它设置个 src:

<avatar src="@drawable/image_resource" />

同理地,其它属性也可以在闭合里写属性定义。

实现聊天列表界面

上面简单地说明了下 Mirror XML,但是我们的目标是编写一个列表,然不是一个 Item,所以要实现聊天列表,真正要修改的是 app/mirror/fragment_messages.xml。

打开 app/mirror/fragment_messages.xml,可以看到类似结构。

<screen><_content layout="@layout/fragment_messages"><listView></listView></_content>
</screen>

要往 ID 为 listView 的 ListView 添加数据,往闭合内放 items 即可;

<items layout="list_item_message"><_item><avatar src="@drawable/avatar_special"/><name text="Special"/><content text="[图片]"/><time text="晚上 11:59"/></_item><_item>....</_item>...
</items>

小 Tips: 这里的测试数据,例如 drawable,可以放到 app/mirror/res 下,这样可以实现测试数据与正式代码分离,非常优雅!

其中我们在最外层的 items 声明了渲染的 layout 为 list_item_message,子 _item 也支持定义它自己的 layout,例如在聊天列表里,有服务号、订阅号的记录,它们的样式可能与其它不同。

<items layout="list_item_message"><_item layout="list_item_message_special"/><_item count="5"/>
</items>

另外,通过设置 count 属性可以实现添加重复的 item。

聊天列表效果

添加好各种模拟数据后,保存好所有文件,回到手机上,在 jimu Mirror 的界面列表选择 fragment_messages


编写主界面

目前 jimu Mirror 暂时只支持 Actionbar Tab 去切换 Fragments,所以主界面先用 Actionbar Tab 吧。

新建 layout activity_main.xml,往里添加一个 ViewPager:

<LinearLayout><android.support.v4.view.ViewPager android:id="@+id/pager" />
</LinearLayout>

修改 mirror 下对应的 XML 文件:

<screen><actionbar title="微信" showTabsFor="@id/pager"/><_content layout="@layout/activity_main"><pager><_page title="聊天" layout="fragment_messages"><listView><items>....</items></listView></_page><_page title="发现" layout="fragment_discovery"><listView><items>....</items></listView></_page><_page title="通讯录" layout="fragment_contacts"/></pager></_content>
</screen>

<items></items> 内就是把上面**编写「聊天列表」**的 items 往里堆,当然这样很不 DRY。我们可以把**items**抽离出一个 XML,再把它们 include 进去。

<!--- File name: messages.xml --->
<items layout="list_item_message"><_item><avatar/><name/><content/><time/></_item>....
</items><!--- File name: activity_main.xml --->
...
<_page title="聊天" layout="fragment_messages"><listView><items include="messages.xml"/></listView>
</_page>
...

效果

在 jimu Mirror 的 layout 列表里选择 activity_main,哈哈,还挺像嘛!


结语

这几年 Android 相关的开发工具都在飞速进步,前几年我们还在挣扎 ADT,现在一个 Android Studio 妥妥的,再配个 Genymotion,谁还想念那自带模拟器呢?
这个插件虽算不上革命之举,但从效率上,无疑提高了界面开发速度,如果团队里还有屌炸天懂 XML 规范的设计师,相当部分的前端工作可以托付给他了。

最后,**相关资源**附上本文项目代码。


相关资源

  • MirrorWechat: 本文示范代码,使用 jimu Mirror 模仿微信界面。
  • MirrorTutorial: 官方的说明文档。

jimu Mirror,加速你的 Android UI 开发相关推荐

  1. Android UI开发第四十一篇——墨迹天气3.0引导界面及动画实现

    周末升级了墨迹天气,看着引导界面做的不错,模仿一下,可能与原作者的代码实现不一样,但是实现的效果还是差不多的.先分享一篇以前的文章,android动画的基础知识,<Android UI开发第十二 ...

  2. Android UI开发第二十五篇——分享一篇自定义的 Action Bar

    Action Bar是android3.0以后才引入的,主要是替代3.0以前的menu和tittle bar.在3.0之前是不能使用Action Bar功能的.这里引入了自定义的Action Bar, ...

  3. Android UI开发第三十篇——使用Fragment构建灵活的桌面

    http://www.lupaworld.com/article-222973-1.html 当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括4寸屏.7寸屏. 10寸屏等等,Android ...

  4. Android UI开发第三十九篇——Tab界面实现汇总及比较

    Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇--ActivityGroup实现tab功能>.这 ...

  5. Android 开发 -- 开发第一个安卓程序、Android UI开发(布局的创建:相对布局和线性布局、控件单位:px pt dp sp、常用控件 、常见对话框、ListView)

    文章目录 1. 开发第一个Hello World程序 1.1 开发程序 1.2 认识程序中的文件 1.3 Android程序结构 1.4 安卓程序打包 2. Android UI开发 2.1 布局的创 ...

  6. 【Android -- UI开发】一份 UI 开发学习指南

    思维导图 推荐资料:官方文档 六大布局 网上有人比喻的很好:布局好比是建筑里的框架,组件按照布局的要求依次排列,就组成了用于看见的漂亮界面了. 请看文章:[Android – UI 开发]六大布局 U ...

  7. Android UI开发——AppCompat实现Action Bar

    http://blog.csdn.net/xyz_lmn/article/details/12623609 每一位Android开发者对Action Bar这种设计都不陌生了,毕竟它已经发布了至少两年 ...

  8. jimu Mirror的使用(android快速手机预览xml界面)

    1 android studio 1.5以上版本的玩家可直接在 安装插件成功后.. 2  jimu Mirror 安装成功后重启,点击如图app旁边的 mirror按钮,启动jimu 此时需要激活码, ...

  9. Android UI开发第四篇——实现像handcent sms或者chomp sms那样的气泡短信样式

    今晚有点时间把断了很长时间的UI开发补一下,这次实现的是像handcent sms或者chomp sms那样的气泡短信样式,也是iphone上的气泡聊天模式.实现这种效果的重点是ListView的di ...

最新文章

  1. 大数相乘--极简单的思路
  2. python在财务上的应用-财会人必看:这个工具,30分钟可以把人家一天的工作都给干完!...
  3. Cisco WebEx:企业协作服务中的音频需求
  4. 将字符串和数字合并动态写入
  5. 程序员面试金典 - 面试题 10.02. 变位词组(哈希map)
  6. 百度地图3.2教程(2)公交查询
  7. 421. 数组中两个数的最大异或值
  8. [转载] Numpy_索引操作
  9. LNMP(Nginx服务,MySQL 服务,安装PHP服务 手动安装技术文档)
  10. 《工业设计史》第五章:设计改革
  11. 是否有无穷多组基本勾股数
  12. 文件访问被拒绝XXX 你需要权限才能执行此操作你需要计算机管理员提供的权限才能对此文件进行更改
  13. 电脑磁盘右键没有新建文件夹???
  14. 廖宇靖正式回应陈晓旭之子传闻啦~
  15. js动态修改浏览器title标题
  16. Binary XML file line #2 in com.example.helloworld:layout/activity_main: Binary XML file line #2 in c
  17. 忘记了word文件打开密码
  18. 逸佳君:CCNA之DHCP实验详细配置
  19. 选题二——智力抢答器的课程设计
  20. 在html中属于复选框标记的是,在 HTML 表单中,文本框、口令框和复选框都是用 INPUT 标记符生成的_学小易找答案...

热门文章

  1. 如何实现从OPC到阿里云IoT平台的数据交换?
  2. 浅析linux下的回收站以及U盘中的.Trash文件夹
  3. 成都计算机系统维护专业中专,成都计算机应用专业中专招生简章
  4. 关于Error in render: TypeError: Cannot read property '0' of null问题的解决方法
  5. 微信小程序如何请求数据
  6. 交通运输综合管理信息平台建设方案(附下载)
  7. APM 飞控文档翻译2
  8. 设计模式之代理模式、动态代理模式、Cglib代理模式
  9. FME大规模转换OSM PBF数据
  10. sim卡在苹果手机显示无服务器,iPhone手机没有信号怎么办 手机提示无服务怎么解决...