您的位置:首页 > 移动开发 > Android开发

android布局之二:布局复用

2016-03-01 16:30 253 查看
对于上一篇文章提到的布局管理器,使用起来容易,但是要想达到高效的目的还是没那么容易的,尤其是仅仅是利用它的最基本的特征往往创建不了最优的View,对于inflate布局文件本身是有性能消耗的,尤其是每增加一个嵌套布局或视图都会对应用程序产生很大的影响,所以我们就要尽量的做到对已存在的布局在更新时最小的变化


一般原则有:

避免不必要的嵌套:不要把一个布局放置在其他布局里,除非是必要的。

避免使用太多视图:在一个布局中每增加一个新的视图,都会在inflate操作时耗时和消耗资源。任何时候都不要在一个布局中包含超过80个视图,否则,消耗在inflate操作上的时间会很大。

避免深度嵌套:布局可以任意嵌套,这极易于创建复杂和深度嵌套的布局层次。如果没有硬性限制,将嵌套限制在10层以下是好的实践。

(其实总结起来就两点:深度和广度上都尽量的简单)

与UI优化相关的Android工具有:layoutopt、hierarchyviewer.bat

layoutopt:后面跟要优化的资源文件,系统会列出可优化的方式

hierarchyviewer:可以树形结构显示当前布局,我们可以通过这种方式学习别人优秀的布局方式,同时可以更加全局的把握自己的布局方式、特点,从而进行优化。

一些可用于资源复用的标签:ViewStub、merge、include

ViewStub: 此标签可以使UI在特殊情况下,直观效果类似于设置View的不可见性,但是其更大的(R)意义在于被这个标签所包裹的Views在默认状态下不会占用任何内存空间。ViewStub通过include从外部导入Views元素。

用法:通过android:layout来指定所包含的内容。默认情况下,ViewStub所包含的标签都属于visibility=gone。ViewStub通过方法inflate()来召唤系统加载其内部的Views。 如:

<ViewStub
android:id="@+id/stub"
android:inflatedId="@+id/subTree"
android:layout="@layout/mySubTree"
android:layout_width="120dip"
android:layout_height="40dip" />


merge:标签用于减少View树的层次来优化Android的布局

可参考/article/4907542.html

include:可以通过这个标签直接加载外部的xml到当前结构中,是复用UI资源的常用标签。如:

<include android:id="@+id/cell1" layout="@layout/ar01" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: