0%

Android开发:提高布局性能-按需加载视图

翻自:http://developer.android.com/training/improving-layouts/loading-ondemand.html 有时,你的布局需要一些复杂,但很少用的视图。无论是item详情,进度指示器,撤销信息,你可以使用懒加载来减少内存占用并加速。

定义一个ViewStub

ViewStub是一个轻量级,没有尺寸并且不需要绘画也不会加到布局里。同样,inflate成本和加到视图布局的成本都很低。每个ViewStub仅仅需要使用android:layout指定inflate哪个布局。 下面的ViewStub是一个半透明的进度条浮层。它仅仅在会在新的item被导入到应用时显示。

<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布局

当你想要载入ViewStub指定的布局时,可以调用setVisibility(View.VISIBLE)方法或inflate()方法

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

提示:一旦inflate()完成,会返回View,所以你不需要再调findViewById() 一旦visible/inflated,viewStub就不再是视图里的元素了。它会被指定的布局替换,这个布局的根节点id就是ViewStub的android:inflatedId属性指定的id。(android:id指定的ID只有在visible/inflated前有效) 提示:ViewStub的一个缺点是,不支持布局里的merge标签