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

来源:互联网 发布:为何说数据驱动安全 编辑:程序博客网 时间:2024/05/16 09:19

为了快速响应和流畅,我们要尽量使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,实在是蛋疼,并且麻烦。


0 0
原创粉丝点击