android布局优化的重要性

来源:互联网 发布:免费顶级域名 编辑:程序博客网 时间:2024/05/16 02:50

对于像我们一些刚刚开始工作的的人来说,往往认为根据设计稿我们设计出来就行,然而却没有考虑到android加载的机制,有时候我们可能并不知道我们的布局是否需要优化,就可能对我们的布局没有什么感觉,下面是我们根据最近一个项目来说说。

 1、布局的hierarchyviewer图和效果的截图


我们可以看到就是一个简单的布局,我们往往没有注意,就会出现这种过度的绘制,如果我们不知道什么是过度绘制,我们可以在手机的开发者选项—->显示GPU过度绘制来看一下,下面是不同程度的效果,

由此看以看出我们布局存在多大的问题。

2、针对布局存在的问题,我们要怎么才能更好的优化呢
①、减少布局的嵌套
  嵌套太多的话会影响布局的渲染,所以我们布局的尽可能的去简化和复用一些布局,不能出现太多的嵌套
 尽量保持布局层级的扁平化,在不影响层级深度的情况下,使用LinearLayout而不是RelativeLayout因为RelativeLayout会让子View调用2次onMeasure,LinearLayout 在有weight时,才会让子View调用2次onMeasure。Measure的耗时越长那么绘制效率就低。
    1、用TextView同时显示图片和文字
           editView等也一样的,还有属性drawableBottom和drawableTop供你使用。同时利用代码setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)可以让我们动态去设置图片  
 <TextView          android:drawableLeft="@drawable/icon_1"  //左边的图片        android:drawableRight="@drawable/icon_4"  //右边的图片        android:drawablePadding="10dp"          android:paddingLeft="10dp"          android:paddingRight="10dp"          android:textSize="16sp"          android:text="设置"          android:background="@color/white"          android:gravity="center_vertical"          android:layout_width="match_parent"          android:layout_height="50dp" />  

    2、使用TextView的行间距 
        利用Android:lineSpacingExtra="x dp"
    3、使用Spannable或Html.fromHtml
    4、用LinearLayout自带的分割线
        android:divider="@drawable/divider"
    5、Space控件
         要给条目中间添加间距 使用Space,他是一个轻量级
   详细了解请参考:http://blog.csdn.NET/qq_17766199/article/details/52863741
②、使用style主题等来定义一个通用的属性
③、使用LinearlayoutCompat组件来实现线性布局元素之间的分割线减少再使用其他的View
④、使用include的标签加载一些共有的布局
⑤、使用marge减少布局嵌套的层次
  <merge/>标签都是与<include/>标签组合使用的,它的作用就是可以有效减少View树的层次来优化布局。
 嵌套布局跟布局标签更改为<merge/>,然后再将嵌套布局放入<include/>中
⑥、对于一些不用必须加载的布局可以使用ViewStub
   对于一些布局虽然设置可见性 View.GONE ,但是在Inflate的时候View仍然会被Inflate,仍然会创建对象,由于这些布局又想到复杂,所以会很消耗系统资源。ViewStub就是为了解决上面问题的,ViewStub是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件
⑦、
3 0
原创粉丝点击