提高显示布局文件的性能 3 - 按需载入视图(ViewStub的使用方法)

简介:

Loading Views On Demand [按需载入视图]

某些时候,我们需要一些很复杂的视图却仅仅很少用到。如果我们在它仅仅需要的时候再载入,这样可以减少内存的使用并且给用户带来流畅的体验。

Define a ViewStub [定义ViewStub]

ViewStub是一个轻量级的view,没有占有空间,没有花费draw的资源,也没有参与在任何一个layout里面。
不仅创建它仅需要很少的系统资源,而且存留在View的层级也是个比较不花费资源的动作。
每一个ViewStub简单的包含一个android:layout的属性来指定待创建的布局文件。

下面是一个包含Progress bar的ViewStub例子,这对于overlay来说是透明的,progress bar仅仅会在需要导入的时候才会可见。
  1. <ViewStub  
  2.     android:id="@+id/stub_import"  
  3.     android:inflatedId="@+id/panel_import"  
  4.     android:layout="@layout/progress_overlay"  
  5.     android:layout_width="fill_parent"  
  6.     android:layout_height="wrap_content"  
  7.     android:layout_gravity="bottom" />  

Load the ViewStub Layout [载入ViewStub的布局]

当你想要载入在ViewStub中定义的布局的时候,可以calling setVisibility(View.VISIBLE) or call inflate().

((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);

// or
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
一旦被设置可见或者被创建,这个ViewStub组件则从View层级中消失,它被创建出来的布局所替代,而且这个布局的ID就是ViewStub里面用android:inflatedId属性所定义的。
(用来定义这个ViewStub的ID的属性andoid:id直到被可见才是有效的)。

Note:ViewStub的一个缺陷是目前并不支持创建包含有<merge>标签的布局文件。

相关文章
|
XML 移动开发 Android开发
activity中加载fragment的控件]
fragment它自己的中文意思:碎片; 一个可以将activity拆分成几个完全独立封装的可重用的组件,每个组件有自己的生命周期和ui布局。
247 1
activity中加载fragment的控件]
【JetPack】视图绑定 ( ViewBinding ) 各种应用 ( 视图绑定两种方式 | Activity 布局 | 对话框布局 | 自定义组件布局 | RecyclerView 列表布局 )
【JetPack】视图绑定 ( ViewBinding ) 各种应用 ( 视图绑定两种方式 | Activity 布局 | 对话框布局 | 自定义组件布局 | RecyclerView 列表布局 )
499 0
【JetPack】视图绑定 ( ViewBinding ) 各种应用 ( 视图绑定两种方式 | Activity 布局 | 对话框布局 | 自定义组件布局 | RecyclerView 列表布局 )
|
缓存 Android开发
android Fragment单页面加载,避免重复加载(懒加载)分析
android Fragment单页面加载,避免重复加载(懒加载)分析
|
Android开发
完美解决Android的WebView加载失败(404,500),显示的自定义视图
完美解决Android的WebView加载失败(404,500),显示的自定义视图
1013 0
|
Android开发 UED
独立于视图的加载控件--让视图更干净
项目源码请参考https://github.com/CarryGanLove/LoadingHelper 背景和问题 在app后sdk开发过程中,如果有遇到延时任务的时候,往往需要添加一个通用的loading控件用来展示给用户,一来为了提示用户当前有耗时的操作,二来降低用户的等待感提升用户体验。
957 0