Android布局优化问题

在进行Android应用开发时,界面优化问题至关重要,它严重影响了应用的加载效率,今天我简单谈论一下Android开发中UI界面的优化问题。


添加到应用中的每一个布局和控件都需要经过初始化、排列位置、绘制三个过程。


通常遇到的问题:比如说,使用嵌套的线性布局可能导致你的布局层级变得十分冗余。此外,如果在嵌套的线性布局中使用了 layout_weight 参数的话,那么他的每一个子 view 都需要被重新测量两次。特别是当他们被用在 ListView 和 GridView 中时,他们会被反复的测量。


可以使用Hierarchy Viewer 以及 Layoutopt来检测(可以查看UI生成树)和优化我们布局,对于工具的具体用法在这里不细说了。

 

总的来说,要想优化界面,通常的可以使用的方法是:

1、 优化布局层次,尽可能使界面扁平化。

通过修改ui布局来减少界面嵌套层次。例如:多使用相对布局来设计界面。

2、 使用标签。

<merge/>

当LayoutInflater遇到<merge/>标签时,它会跳过它,并将<merge />内的元素添加到<merge />的父元素里。

<merge/>只能作为XML布局的根标签使用,只能替换<FrameLayout/>

当Inflate以<merge/>开头的布局文件时,必须指定一个父ViewGroup,并且必须设定attachToRoot为true。参看LayoutInflater.inflate(int resource, ViewGroup root, booleanattachToRoot)。

 

<include/>

标签内不能设置RelativeLayout属性,如android:layout_alignParentBottom,因为不起作用

include标签内设置id属性后(android:id),其引用的布局layout内的id属性就不起作用了,怀疑是其引用的layout外层包裹了一层include标签或者是覆盖了其内的属性id

如果没有include标签,所有布局代码都写在一个xml文件中,界面会显得很冗余,可读性很差。而且界面加载的时候是按照顺序加载的,前面的布局不能调用其后面的布局id。而采用include后,一个include中可以引用其后的include中的布局id属性


3、按需加载View视图。

使用< ViewStub />标签来加载一些不常用的布局。

    ViewStub:可以理解成一个非常轻量级的View,有着自己的属性及特定的方法。当ViewStub使用在布局文件中时,当程序inflate布局文件时,ViewStub本身也会被解析,且占据内存控件,但是与其他控件相比,主要区别体现在以下几点:

1.当布局文件inflate时,ViewStub控件虽然也占据内存,但是相相比于其他控件,ViewStub所占内存很小;

2.布局文件inflate时,ViewStub主要是作为一个“占位符”的性质,放置于view tree中,且ViewStub本身是不可见的。ViewStub中有一个layout属性,指向ViewStub本身可能被替换掉的布局文件,在一定时机时,通过viewStub.inflate()完成此过程;

3.ViewStub本身是不可见的,对ViewStub setVisibility(..)与其他控件不一样,ViewStub的setVisibility成View.VISIBLE或INVISIBLE如果是首次使用,都会自动inflate其指向的布局文件,并替换ViewStub本身,再次使用则是相当于对其指向的布局文件设置可见性。

        

上面简单谈论了一下布局优化的方法和部分方法的简介,作为概述,没有深入研究。若有不足之处,还请批评指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值