高质量布局技巧——ViewStub延迟加载
来源:互联网 发布:forrest手表淘宝 编辑:程序博客网 时间:2024/04/28 12:03
高质量布局技巧——ViewStub延迟加载
一、ViewStub的概念
ViewStub是一种默认不可见的视图,直接继承自View。它可以理解成一个非常轻量级的View,与其他控件一样,有着自己独特的属性和特定方法。
二、ViewStub的作用
程序运行过程中,默认情况下无需显示ViewStub所指向的布局文件,只有在特定的某些较少条件下,此时ViewStub所指向的布局文件才需要被inflate加载,且此布局文件将直接替换当前ViewStub。这样,不必每次在onCreate的时候加载布局,只有需要的时候加载,就可以提高我们应用的性能。
举个例子说明一下:
ViewStub经常用在ListView的Item中,用来隐藏一些操作,使用起来也很简单,主要就是在ListView的Item中通过一个ViewStub来引用被隐藏的布局文件。当用户点击Item时,判断下当前是可见还是不可见,实时进行显示状态的转换即可。这样,可以减少加载的内存,因为不是每个item都会被点击。
示例如下:这部分的源码实现在项目中很多,就不放了。效果图大致如下:(效果图取自http://michaelye1988.iteye.com/blog/1416804 非常感谢)
其项目地址:https://github.com/michaelye/ViewStubDemo.git 有需求的同学自己去取吧。
三、ViewStub的特性
如果要满足其作用的话,那viewstub就需要一些独特的属性或者方法来支持。那么我们详细来说明一下。
1)当布局文件被解析时,ViewStub相比于其他控件,其所占内存很小。它主要作为一个“占位符”,放置于view tree中,且其默认是不可见的。它包含一个layout属性,用于指向ViewStub本身可能被替换掉的布局文件。当需要时候,通过ViewStub的inflate方法完成加载。
<ViewStub android:id="@+id/viewstub_demo_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dip" android:layout_marginRight="5dip" android:layout="@layout/viewstub_demo_image_layout"/>
2)在可见性设置过程中,也与其他的控件不太一样。首次设定设定时,都会自动inflate其指向的布局文件,并替换ViewStub本身,再次使用则是相对于对其指向的布局文件设置。
注:对ViewStub的inflate操作只能进行一次,因为inflate以后,其指向的布局文件已经替换了当前的ViewStub本身,一旦替换后,此时原来的布局文件中就没有ViewStub控件了,因为,如果多次对ViewStub进行inflate,会出现错误信息:ViewStub must have a non-null ViewGroup viewParent。
0 0
- 高质量布局技巧——ViewStub延迟加载
- Android ViewStub 布局延迟加载
- 使用 ViewStub 延迟加载布局
- Android布局性能优化—从源码角度看ViewStub延迟加载技术
- Android布局性能优化—从源码角度看ViewStub延迟加载技术
- ViewStub延迟创建(加载)
- ViewStub类延迟加载
- 延迟加载之ViewStub
- ViewStub延迟加载技术
- Android中关于布局文件延迟加载控件ViewStub
- Android中关于布局文件延迟加载控件ViewStub
- 布局技巧:使用ViewStub
- 布局技巧:使用ViewStub
- android布局技巧 ViewStub
- 布局技巧:使用ViewStub
- 布局技巧:使用ViewStub
- 布局技巧:使用ViewStub
- 布局技巧:使用ViewStub
- 新手配置JDK,虽然不知道是干什么用的
- LeetCode 36 - Valid Sudoku
- ARM指令集--ldr、mov与str的用法与区别
- 蓝桥杯五2切面条递推公式
- 方法应用场景汇总
- 高质量布局技巧——ViewStub延迟加载
- Oracle JDeveloper 11g (11.1.2.3.0)下载地址
- Win内核原理与实现学习笔记2-现代操作系统的基本结构
- react-router 0.X web 使用
- BZOJ 3698: XWW的难题|有上下界的网络流之最大流
- redis持久化RDB和AOF
- C++ primer 第五版 中文版 练习 10.37
- GCD介绍
- VBA教程初级(二):数据结构