Android抽象布局——include、merge 、ViewStub

在布局优化中,Android官方提到了有三种布局、、,并介绍了这三种布局各有的优势,下面简单说一下。

1、布局重用include

在编写布局文件中,若几个布局界面存在较多的共同模块,可以进行代码块的重用,编写进入一个共同的布局里面,然后在多个布局文件中使用include标签进行引入.

 <LinearLayout  android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:gravity="center_vertical">

        <include layout="@layout/layout_safety_one_percent" />

        <View  android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1" />

        <TextView  android:id="@+id/tv_can_buy" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="20,999.00" />
    </LinearLayout>

2.通过merge减少视图层级

这个标签在UI的结构优化中起着非常重要的作用,它可以删减多余的层级,优化UI。merge多用于替换FrameLayout或者当一个布局包含另一个时,merge标签消除视图层次结构中多余的视图组。

<merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn="@layout/list_item_home">

    <com.fenqile.licai.view.IconTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="\ue604"
        android:textColor="#58bf8b"
        android:textSize="15sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/text_safety_one_percent"
        android:textColor="#58bf8b"
        android:textSize="15sp" />
</merge>
以上这些代码块就是在一个父布局中引入的一个布局,父布局是一个水平的布局,而引入的也是一个水平的布局,这个时候,子布局在使用水平布局就没必要了,
所以,也就是说直接使用merge标签替代LinearLayout就可以了.

3.懒加载布局ViewStub

ViewStub 标签最大的优点是当你需要时才会加载,使用他并不会影响UI初始化时的性能。各种不常用的布局,例如进度条、显示错误消息等可以使用此标签,以减少内存使用量,加快渲染速度。ViewStub 是一个不可见的,大小为0的View。

<ViewStub android:id="@+id/stub_import" android:inflatedId="@+id/panel_import" android:layout="@layout/progress_overlay" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" /> 

当你想加载布局时,可以使用下面其中一种方法:

((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE); 
// or  
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate(); 

当调用inflate()函数的时候,ViewStub被引用的资源替代,并且返回引用的view。 这样程序可以直接得到引用的view而不用再次调用函数findViewById()来查找了。
注:ViewStub目前有个缺陷就是还不支持 merge 标签。

你可能感兴趣的:(android,include,merge,布局)