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

本文介绍如何使用ViewStub组件来优化Android应用的界面加载过程,通过延迟加载不常用布局以节省内存并提高渲染效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

定义 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/>标签。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值