开篇Android是运行在移动终端上的操作系统。与传统PC最大的区别在于,移动端的资源短缺“比较”明显,当然,对于一些屌丝机型来说,靠谱应该用“非常”来形容。因此,经常会出现一些软件在一些缺乏青春活力的老机器上异常终止的情况;但是,作为互联网厂商,广大屌丝机用户一定是一个庞大的用户资源,这是一个可以放弃的市场?!当然不是o(╯□╰)o,所以我们要尽可能的提高软件的效率来赢得客户的关注和微笑,屌丝也是客户!本篇博客主要介绍如何提高UI设计效率,降低资源占用。毕竟在终端资源紧缺的今天,效率永远是王道。我们在评判一个UI界面的时候,不会觉得它有多复杂,有多炫,它就是靠谱的。简约而不凡的高效UI界面是非常牛逼的界面设计。Introduction在android应用程序中,硬编码的方式编写接口是不被提倡的方法。当然,硬编码接口比基于XML文件的软编码接口更高效、更灵活,但维护起来非常困难,而且代码错综复杂会让程序布满地雷,应用可能会被炸毁一天起来。所以如果非常有必要也非常确定用代码写一个硬编码的接口,其他情况还是用易于维护的XML来写比较好。因此,本文的UI优化设计归结为XML布局文件的优化设计。在Google给我们的开发环境中,就有这么一个非常好用的工具——hierarchyviewer。估计很多人都没有注意过这个隐藏在偏僻角落的小工具;它可以帮助我们非常轻松地分析UI界面的结构。以及构建效率,这个工具的位置在sdk/tools/文件夹下。楼下上图:大家好,我是图~这是布局上只有一个TextView组件的XML界面。图片告诉我们,一共使用了四个组件来构建这个界面,也就是需要绘制四个组件。自然,每次绘制组件都会消耗资源。让我们进入疯狂拖拽、炫酷、轰天的主题部分。...尽量用最少的步骤完成布局。我是社会好青年,为国家节约资源;当然,作为一个组成部分,这种意识也是需要的。每个组件的绘制都会或多或少的消耗终端资源。所以我们这里不能听老祖宗的话:韩信兵越多越好,精兵简政才是UI设计的唯一出路。不相信?好的!让我们从一个比较示例开始。是不是很简单?几行代码不是几分钟的事情吗?代码先别急着看,太累又伤眼,直接去hierarchyviewer里的图片看就行了,直接用a小按钮3个组件来绘制,这就是3N的复杂度,如果有5个这样的按钮,就有15个组件,如果有10个按钮,就有30个组件,如果有N++,我靠,我不敢想象一下。在这种情况下,我们是否应该考虑优化和优化?翻了翻资料,发现这个按钮不用那么多元件也能实现。按钮android:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/btn_backgroup"android:drawableLeft="@drawable/header_back"android:gravity="center"android:padding="10dp"/>还是原来的按钮,还是原来的味道,复杂度从3N降到N!!!这样的效率你敢说不想提高????小结一:我们在设计UI布局的时候,应该以尽可能少的使用组件为前提。由于系统组件的封装比较完整,所以可以得到多个简单的组件由一个更复杂的组件来实现。效率好。因为每个组件都需要独立绘制,绘制多个组件所浪费的资源,不仅把我们的应用给干掉了,也深深打击了买不起高端机的屌丝用户的自尊心——“妈的,这个软件它不再工作了!”。你不工作?我放弃你了我们还记得一开始给出的图片吗?我们在布局中只用了一个TextView,而RelativeLayout好像什么都没做。.....我们从来不主张不劳而获,软件行业的潜规则也是如此。出于构建和谐社会的正义感,我们当然不能坐视RelativeLayout的流氓行为站在厕所里不拉屎,所以我们需要使用一个解决方案——标签,可以帮助我们去掉一些不需要的根节点。为了有更好的既视感,我使用了更复杂的布局(其实一点都不复杂),主要布局XML文件:组合控件布局XML文件:这个界面很丑,不忍直视:丑就是丑,还是要继续用神器hierarchyviewer看看xml生成的界面结构图探索丑女心中丰富多彩的世界~~~~~~~我靠...三个组件的布局居然用了六层嵌套布局,还有很浪费大花花公子瞬间嫁给老光棍的感觉,先看图说起,第一层和第二层的组件会由系统自动生成,第一层的FrameLayout和第五层的LinearLayout已经完全展现出来了,所以我们要下定决心去掉它们,怎么做?使用标签。由于标签只能作为根元素使用,我们可以对这两个根元素稍作修改,如下:MainlayoutXMLfile:组合控件布局XML文件:<按钮android:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_contentt"android:text="button2"/>PS:注意需要在组合控件的类中添加一个setOrientation(LinearLayout.HORIZONTAL)来保证组件的水平排列。图层已经缩减为四层结构.感觉好清新,感觉欣喜若狂,自然效率的提升是毋庸置疑的。。。一总结:标签可以替代这个布局组件,用于线性布局等其他不复杂的布局组件和其他组合组件,可以在继承的子类中设置它的属性,也可以使用标签,标签不占用资源,自然生成界面时不会生成对应的组件。另外需要注意的是只能作为根元素使用。n需要使用inflate生成布局文件,必须指定一个ViewGroup作为其父元素,并设置inflate的attachToRoot参数为true。(参考inflate(int,ViewGroup,boolean))。