解析Android开发优化之:对界面UI的优化详解(三)
有时候,我们的页面中可能会包含一些布局,这些布局默认是隐藏的,当用户触发了一定的操作之后,隐藏的布局才会显示出来。比如,我们有一个Activity用来显示好友的列表,当用户点击Menu中的“导入”以后,在当前的Activity中才会显示出一个导入好友的布局界面。从需求的角度来说,这个导入功能,一般情况下用户是不使用的。即大部分时候,导入好友的布局都不会显示出来。这个时候,就可以使用延迟加载的功能。
ViewStub是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件。当ViewStub被设置为可见,或者调用inflate()函数时,才会真的去加载这个布局资源文件。该ViewStub在加载视图时会在父容器中替换它本身。因此,ViewStub会一直存在于视图中,直到调用setVisibility(int)或者inflate()为止。ViewStub的布局参数会随着加载的视图数一同被添加到ViewStub父容器。同样,也可以通过使用inflatedId属性来定义或重命名要加载的视图对象的Id值。
请参考下面的代码片段。
<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"/>
通过“stub_import”这个id可以找到被定义的ViewStub对象。加载布局资源文件“progress_overlay”后,ViewStub对象从其父容器中移除。可以通过“panel_import”这个id找到由布局资源“progress_overlay”创建的View。
执行加载布局资源文件的推荐方式如下:
((ViewStub)findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
//或者
ViewimportPanel=((ViewStub)findViewById(R.id.stub_import)).inflate();
当inflate()被调用,这个ViewStub被加载的视图所替代,并且返回这个视图对象。这使得应用程序不需要额外执行findViewById()来获取加载视图的引用。
利用ViewStub可以与xml文件里面指定的布局资源文件关联起来,让布局资源文件在需要使用的时候再加载上去。什么时候用什么时候才加载,不用在开始启动的时候一次加载。这样做既可以加快应用的启动速度,又可以节省内存资源。
相关文章
- Android UI 架构演进:从 MVC 到 MVP、MVVM、MVI
- android 浏览器 开发,Android 浏览器的开发实例分享
- 代码加密 android,Android 开发怎样做代码加密或混淆「建议收藏」
- Android 垂直同步和三重缓冲[通俗易懂]
- Android UI设计
- android 模拟器 haxm,Android模拟器不使用HAXM
- android 定时器实例,Android定时器和Handler用法实例分析
- android telephony 原理解析与开发指南_Android逆向pdf
- Android为什么不能在子线程更新UI
- android toast全屏,Android Toast实现全屏显示
- android toast 自定义时间,Android 自定义 Toast 显示时间「建议收藏」
- Android 编译_android线程
- Android resource linking failed_android sdk location should not
- UI自动化平台_ui自动化是什么意思
- 【Android 安全】DEX 加密 ( Java 工具开发 | 生成 dex 文件 | Java 命令行执行 )
- 【错误记录】Android 应用 release 打包报错处理 ( 关闭语法检查 | 日志处理 | release 配置 )
- 【Android 组件化】使用 ARoute 实现组件化 ( 完整组件化项目框架 )
- 【错误记录】Android Studio 编译时 lint 检查报错 ( WARNING: DSL element ‘android.dataBinding.enabled‘ is obsolet )
- 【Android UI】Canvas 画布 ⑨ ( Canvas 绘图坐标系平移实例 )
- 【Android NDK 开发】CMake 中查找链接 Android 自带动态库位置说明 ( ndk-bundleplatformsandroid-29arch-armusrlib )
- 【错误记录】Android Studio 编译报错 ( Could not resolve com.android.tools.build:gradle:7.4.2. )
- 社区(OkCommunity)Android 通讯app开发简介详解手机开发
- Android开发中遇到的问题(三)——eclipse创建android项目无法正常预览布局文件详解手机开发
- [android] 看博客学习Android常见的几种RuntimeException详解手机开发
- android Universal Image Loader for Android 说明文档 (1)详解手机开发
- Android UI设计原则详解手机开发
- Android中android:visibility的3中属性的剖析详解手机开发
- 微软向OneDrive和Bing Android应用推送UI改进和全新功能
- android中ListView多次刷新重复执行getView的解决方法
- Android中ImageView无法居中的问题解决方法
- android读取raw文件示例
- Android后台线程和UI线程通讯实例
- Android入门之AlertDialog用法实例分析