《Android 4 高级编程》之UI优化

本文探讨了在UI设计中如何通过布局简化、避免UI变化导致的重新填充、使用<include>标签进行视图复用、ViewStub实现初始隐藏控件的延迟加载以及使用<merge>标签减少冗余,以提高应用的响应速度和流畅度。

为了快速响应和流畅,我们要尽量使1:布局简单;2:避免因为小的UI的变化而导致整个UI重新填充

 

UI的优化:

<include>

<include>标签经常用于View的复用

我们可以在一个layotu/xml文件中通过<inclued>标签来实现一个layout的复用:

 

如:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    
    <include android:id="@+id/basic" layout="@layout/layout_basic"/>
 
</RelativeLayout>


 

这样我们就实现了一个layout的复用

注意<include>里面的layout如果只是要做当前界面的一部分的时候,最好是"wrap_content"

<ViewStub>

常用作初始隐藏控件再显示的优化,通常称为延迟加载

 

通常我们在一个界面开始的时候,可能把所有的View都加载上去,然后把需要隐藏的View设置为GONE

在需要显示的时候再设置为Visiable。来显示出来

 

这样做的话,其实这个初始隐藏的View其实还是在界面开始加载的时候就实例化了。占据了资源和延长了加载界面的时间。

 

而如果使用<ViewStub>标签来实现界面的初始隐藏:ViewStub里面的都是默认隐藏的

然后在需要的时候再实例化ViewStub中的界面,我们就能把隐藏的界面给加载进来,从而减少了界面oncreate时候的加载时间。

 

 

注意点:

1ViewStub只能inflate一次,inflate后,ViewStubnull,其实我们加载进来控件后,也不需要这个ViewStub

2ViewStub只能inflate一个布局文件,也就是一个layout.xml

 

使用例子:

 

1:指定需要初始隐藏的layout:我只放了一张图片


2:指定包含<ViewStub>layout


3:代码中实现显示和隐藏:



效果就是图片初始隐藏,点击button,把图片显示出来,再点击,图片隐藏。

<merge>

通常是使用<merge>标签作为根标签,也只能作为根标签,来替代FrameLayout根标签使用

是为了减少一层冗余的FrameLayout

 

参考:http://blog.sina.com.cn/s/blog_62f987620100sf13.html

FrameLayout为根标签:


Merge为根标签:

 

我们可以通过<include>标签将<merge>标签所在的layout添加到一个界面

 

注意:

1:<merge>标签只能为根标签

2:当我们要inflate的layout是以merge为根标签的话,我们需要使用:

View android.view.LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)

 

我们需要指定里面的父级ViewGrop参数,还需要将第三个参数设置为true。

 

说实话,个人认为inflate一个merge为根标签的layout,实在是蛋疼,并且麻烦。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值