创建好看的Android布局是个不小的挑战,当你花了数小时调整好它们适应多种设备后,你通常不想再重新调整,但笨重的嵌套布局效率往往非常低下,幸运的是,在Android SDK中有一个工具可以帮助你优化布局,以减少内存消耗,提高应用程序运行性能。

优化是需要一定技巧的,性能良好的代码固然重要,但写出优秀代码的成本往往也很高,你可能不会过早地贸然为那些只运行一次或临时功能代码实施优化,如果你的应用程序反应迟钝,并且卖得很贵,或使系统中的其它应用程序变慢,用户一定会有所响应,你的应用程序下载量将很可能受到影响。

在开发期间尽早优化你的布局是节省成本,提高性能的简单方法,Android SDK带来了一个工具,它可以自动分析你的布局,发现可能并不需要的布局元素,以降低布局复杂度。

第一步:准备工作

如果想使用Android SDK中提供的优化工具,你需要在开发系统的命令行中工作,如果你不熟悉使用命令行工具,那么你得多下功夫学习了。

我们强烈建议你将Android工具所在的路径添加到操作系统的环境变量中,这样就可以直接敲名字运行相关的工具了,否则每次都要在命令提示符后面输入完整的文件路径,现在在Android SDK中有两个工具目录:/tools和/platform-tools,本文主要使用位于/tools目录中的layoutopt工具,另外我想说的是,ADB工具位于/platform-tools目录下。

运行layoutopt

运行layoutopt工具是相当简单的,只需要跟上一个布局文件或布局文件所在目录作为参数,需要注意的是,这里你必须包括布局文件或目录的完整路径,即使你当前就位于这个目录。我们来看一个简单的例子:

D:\d\tools\eclipse\article_ws\Nothing\res\layout>layoutopt

D:\d\tools\eclipse\article_ws\Nothing\res\layout\main.xml

D:\d\tools\eclipse\article_ws\Nothing\res\layout\main.xml

D:\d\tools\eclipse\article_ws\Nothing\res\layout>

注意,在上面的示例中,包含了文件的完整路径,如果不指定完整路径,不会输出任何内容,例如:

D:\d\tools\eclipse\article_ws\Nothing\res\layout>layoutopt main.xml

D:\d\tools\eclipse\article_ws\Nothing\res\layout>

因此,如果你看不任何东西,则很可能是文件未被解析,也就是说文件可能未被找到。

使用layoutopt输出

Layoutopt的输出结果只是建议,你可以有选择地在你的应用程序中采纳这些建议,下面来看几个使用layoutopt输出建议的例子。

无用的布局

在布局设计期间,我们会频繁地移动各种组件,有些组件最终可能会不再使用,如:

XML/HTML代码<?xmlversion ="1.0"encoding="utf-8"?>

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

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

android:id="@+id/linearLayout1"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:orientation="vertical">

android:id="@+id/textView1"

android:layout_width="wrap_content"

android:text="TextView"

android:layout_height="wrap_content">

工具将会很快告诉我们LinearLayout内的LinearLayout是多余的:

11:17 This LinearLayout layout or its LinearLayout parent is useless

输出结果每一行最前面的两个数字表示建议的行号。

根可以替换

Layoutopt的输出有时是矛盾的,例如:

XML/HTML代码<?xmlversion ="1.0"encoding="utf-8"?>

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

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/linearLayout1"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:orientation="vertical">

android:id="@+id/textView1"

android:layout_width="wrap_content"

android:text="TextView"

android:layout_height="wrap_content">

android:text="TextView"

android:id="@+id/textView2"

android:layout_width="wrap_content"

android:layout_height="wrap_content">

这个布局将返回下面的输出:

5:22 The root-level can be replaced with

10:21 This LinearLayout layout or its FrameLayout parent is useless

第一行的建议虽然可行,但不是必需的,我们希望两个TextView垂直放置,因此LinearLayout应该保留,而第二行的建议则可以采纳,可以删除无用的FrameLayout。

有趣的是,这个工具不是全能的,例如,在上面的例子中,如果我们给FrameLayout添加一个背景属性,然后再运行这个工具,第一个建议当然会消失,但第二个建议仍然会显示,工具知道我们不能通过合并控制背景,但检查了LinearLayout后,它似乎就忘了我们还给FrameLayout添加了一个LinearLayout不能提供的属性。

太多的视图

每个视图都会消耗内存,在一个布局中布置太多的视图,布局会占用过多的内存,假设一个布局包含超过80个视图,layoutopt可能会给出下面这样的建议:

-1:-1 This layout has too many views: 83 views, it should have <= 80!

-1:-1 This layout has too many views: 82 views, it should have <= 80!

-1:-1 This layout has too many views: 81 views, it should have <= 80!

上面给出的建议是视图数量不能超过80,当然最新的设备有可能能够支持这么多视图,但如果真的出现性能不佳的情况,最好采纳这个建议。

嵌套太多

布局不应该有太多的嵌套,layoutopt(和Android团队)建议布局保持在10级以内,即使是最大的平板电脑屏幕,布局也不应该超过10级,RelativeLayout可能是一个解决办法,但它的用法更复杂,好在Eclipse中的Graphical Layout资源工具更新后,使得这一切变得更简单。

下面是布局嵌套太多时,layoutopt的输出内容:

-1:-1 This layout has too many nested layouts: 12 levels, it should have <= 10!

305:318 This LinearLayout layout or its RelativeLayout parent is possibly useless

307:314 This LinearLayout layout or its FrameLayout parent is possibly useless

310:312 This LinearLayout layout or its LinearLayout parent is possibly useless

嵌套布局警告通常伴随有一些无用布局的警告,有助于找出哪些布局可以移除,避免屏幕布局全部重新设计。

总结

Layoutopt是一个快速易用的布局分析工具,找出低效和无用的布局,你要做的是判断是否采纳layoutopt给出的优化建议,虽然采纳建议作出修改不会立即大幅改善性能,但没有理由需要复杂的布局拖慢整个应用程序的速度,并且后期的维护难度也很大。简单布局不仅简化了开发周期,还可以减少测试和维护工作量,因此,在应用程序开发期间,应尽早优化你的布局,不要等到最后用户反馈回来再做修改。

2013年3月18日

android html 布局设计工具,教你使用Android SDK布局优化工具layoutopt相关推荐

  1. 【Android 命令行工具】Android 命令行工具简介 ( 官方文档 | SDK 命令行工具 | SDK 构建工具 | SDK 平台工具 | 模拟器工具 | Jetifier 工具 )

    文章目录 一.官方文档 二.Android 命令行工具简介 1.SDK 命令行工具 2.SDK 构建工具 3.SDK 平台工具 4.模拟器工具 5.Jetifier 工具 一.官方文档 Android ...

  2. android图片加载过程,教你写Android ImageLoader框架之图片加载与加载策略

    在教你写Android ImageLoader框架之初始配置与请求调度中,我们已经讲述了ImageLoader的请求配置与调度相关的设计与实现.今天我们就来深入了解图片的具体加载过程以及加载的策略(包 ...

  3. 应用css div进行页面布局设计,利用CSS与DIV进行页面布局.ppt

    <利用CSS与DIV进行页面布局.ppt>由会员分享,可在线阅读,更多相关<利用CSS与DIV进行页面布局.ppt(6页珍藏版)>请在人人文库网上搜索. 1.利用CSS与DIV ...

  4. android开发中,手把手教你root Android系统

    手把手教你root Android系统 因为从事的是智能家居相关行业,用的系统也是android系统,在某些场景下可能需要拿到系统的root权限.下面就手把手教大家去拿到app的root权限和adb的 ...

  5. 开源android项目到jcenter,手把手教你将Android项目开源到JCenter两种方式以及挖坑和填坑(一)...

    - 前言 开发中,或多或少都会用到无私的程序猿分享的开源项目,Androidstudio中使用开源也很方便 例如家喻户晓的Rxjava,只需要一句话compile 'io.reactivex:rxja ...

  6. 土豆 android 缓存路径,#土豆记事#教你开发Android App之 —— Hello Android

    上一篇文章,我们讲了如何创建一个工程,以及Android工程的一些基本概念,把工程创建出来后,我们看下文件目录结构,一个简单的工程结构如下. 其实这个目录结构初次看还是挺让人心慌慌的. Android ...

  7. android 翻译功能开发,手把手教你开发Android studio翻译插件

    前言 由于我英语很烂,写代码的时候需要用英文命名,有些单词不知道,就只能切换到浏览器打开网页搜索,再拿到英文单词.这样每次都要切换出去,很麻烦,于是,就想着开发一个Android studio插件,在 ...

  8. android 记事本ppt,基于Android记事本软件设计与实现.ppt

    基于Android记事本软件设计与实现 START 基于Android记事本软件的设计与实现 研究现状 传统记事本虽然与纸质的笔记本相比,给我们的生产生活带来了巨大的便利,但随着智能化的迅猛发展和互联 ...

  9. Android的页面设计

    Android的页面设计 作者: 本次任务完成时间: 开发工具与关键技术: 完成模块功能:功能实现 用LinearLayout布局,根据项目需要布局,orientation="vertica ...

最新文章

  1. windows10+Python3-如何安装numpy和matplotlib包
  2. highcharts与ajax的应用
  3. Ocelot(二)- 请求聚合与负载均衡
  4. mysql聚集索引和二级索引_mysql8 参考手册--聚集索引和二级索引
  5. Java常用集合体系以及相互区别
  6. python 获取html js 变量_Python爬虫与反反爬虫实践
  7. LVS之NAT模型配置实验
  8. python 下载拉钩教育AES加密视频
  9. maven依赖的jar包版本不一样_Maven依赖jar包冲突常见的解决方法
  10. 在Ubuntu 14.04(Trusty Tahr)上安装Plesk
  11. 用VB轻松调用其他程序
  12. MYSQL5.6和5.7编译标准化安装与配置
  13. 党建活动献爱心,达飞云贷冬日送温暖
  14. [EffectiveC++]item3:尽可能使用const
  15. 解决EXSi6.0没有WEB Client的问题
  16. 微信小程序云数据库操作
  17. 微信营销诀窍:有朋自各方来
  18. ABAP CDS编写
  19. Messaging——Solace PubSub+
  20. 手机“族群论”:十大族群背后的移动新世界

热门文章

  1. Visual Studio 2019重新安装问题
  2. 【智慧家科教2023新春首训】东方昱老师畅谈新发展之路:前途是光明的 未来是可期的
  3. NB-IoT和eMTC对比
  4. js 数组的find和findIndex
  5. ios屏幕的旋转,Device Orientation
  6. 用HTML+CSS做一个简单好看的环保网页
  7. css3新增属性sticky
  8. 空间矢量数据处理 | 第一讲:矢量数据的读入与保存
  9. 8个有用的表单构建工具,你一定要使用并收藏好
  10. Windows环境安装MySQL步骤