android中提供了<include />、<merge />、<ViewStub />三种优化布局。
1.<include />
<include layout="@layout/test"/>
此布局通常用于一些复用较多的布局,方便后期维护。
<include />标签若指定了ID属性,而你的layout也定义了ID,则你的layout的ID会被覆盖。
<include />如要使android:layout_*生效,必须要写layout_width和layout_height两个属性。
2.<merge />
<?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="btn1"/>
<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="btn2"/> </merge>
此布局通常要与<include />结合使用,用于删除不必要布局曾经。
当<merge />布局文件被引入到其它布局中是,<merge />会被忽略。
使用此布局需要注意的是,布局中的控件属性要根据引用它们的父布局来设置。最好的方法是现将<merge />换为将来的父布局类型,等编码结束在换回<merge />。
3.<ViewStub />
<ViewStub
android:id="@+id/vs"
android:layout="@layout/test"
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
<ViewStub />的特点是当你需要时才会加载,这样可以减少不必要的内存开支。
显示<ViewStub />
ViewStub vs = (ViewStub) findViewById(R.id.vs);
View view = vs.inflate();
inflate方法只可以调用一次,此方法调用以后ViewStub与普通布局就没什么区别了,
之后就可以获取其中的组件进行控制。
要查布局情况,可以使用SDK中的monitor工具进行产看。
想要看看UI的绘制情况,可以通过设备中的开发者选项显示GPU绘制,能很清楚地看到各个部分的绘制次数。