android布局优化的重要性

本文通过一个实际项目案例,探讨了Android应用中布局优化的重要性,并提出了多种优化策略,包括减少布局嵌套、使用特定组件和标签等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于像我们一些刚刚开始工作的的人来说,往往认为根据设计稿我们设计出来就行,然而却没有考虑到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,他是一个轻量级
②、使用style主题等来定义一个通用的属性
③、使用LinearlayoutCompat组件来实现线性布局元素之间的分割线减少再使用其他的View
④、使用include的标签加载一些共有的布局
⑤、使用marge减少布局嵌套的层次
  <merge/>标签都是与<include/>标签组合使用的,它的作用就是可以有效减少View树的层次来优化布局。
 嵌套布局跟布局标签更改为<merge/>,然后再将嵌套布局放入<include/>中
⑥、对于一些不用必须加载的布局可以使用ViewStub
   对于一些布局虽然设置可见性 View.GONE ,但是在Inflate的时候View仍然会被Inflate,仍然会创建对象,由于这些布局又想到复杂,所以会很消耗系统资源。ViewStub就是为了解决上面问题的,ViewStub是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件
⑦、
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值