Android应用开发之(按需加载View)

来源:互联网 发布:java中createNewfile 编辑:程序博客网 时间:2024/06/05 07:32

有些情况下,您的界面中包含了一些复杂的但是不长使用的布局内容。例如 进度条、一条撤销操作的提示信息等,最明显的一个例子就是当用户第一次使用该应用程序的时候,显示一个帮助提示内容。您可以当需要显示这些内容的时候在载入这些布局内容,这样就可以减少内存使用并提高界面的渲染速度。

定义 ViewStub

ViewStub是一个轻量级的View,没有尺寸也不会绘制任何东西到屏幕上去。因此,去解析这个View是相当快的。每个ViewStub只需要指定 android:layout属性即可。

下面的 ViewStub是一个 半透明的进度条。只有当新的条目导入到程序中的时候才会显示这个进度条。

<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); // 或者 View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();

注意:inflate()函数返回解析后的 View,所以你没有必要在调用函数 findViewById()来得到这个View。

一旦可见或者解析(visible/inflated)后, 这个 ViewStub就不在界面层级结构中了,被锁引用的布局替代了,新的ID是 ViewStub的属性 android:inflatedId中设置的值。

注意:目前 ViewStub有个缺点就是还没有支持 <merge/>标签。