`
yidongkaifa
  • 浏览: 4070310 次
文章分类
社区版块
存档分类
最新评论

ViewStub的应用

 
阅读更多

在开发应用程序的时候,经学会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在代码中动态的更改它的可见性。这样的做法的优点是逻辑简单而且控制起来比较灵活。但是它的缺点就是,耗费资源。虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性。也就是说,会耗费内存等资源。

推荐的做法是使用android.view.ViewStub,ViewStub是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件。可以为ViewStub指定一个布局,在Inflate布局的时候,只有ViewStub会被初始化,然后当ViewStub被设置为可见的时候,或是调用了ViewStub.inflate()的时候,ViewStub所向的布局就会被Inflate和实例化,然后ViewStub的布局属性都会传给它所指向的布局。这样,就可以使用ViewStub来方便的在运行时,要还是不要显示某个布局。

但ViewStub也不是万能的,下面总结下ViewStub能做的事儿和什么时候该用ViewStub,什么时候该用可见性的控制。

首先来说说ViewStub的一些特点:

1. ViewStub只能Inflate一次,之后ViewStub对象会被置为空。按句话说,某个被ViewStub指定的布局被Inflate后,就不会够再通过ViewStub来控制它了。

2. ViewStub只能用来Inflate一个布局文件,而不是某个具体的View,当然也可以把View写在某个布局文件中。

基于以上的特点,那么可以考虑使用ViewStub的情况有:

1. 在程序的运行期间,某个布局在Inflate后,就不会有变化,除非重新启动。

因为ViewStub只能Inflate一次,之后会被置空,所以无法指望后面接着使用ViewStub来控制布局。所以当需要在运行时不止一次的显示和隐藏某个布局,那么ViewStub是做不到的。这时就只能使用View的可见性来控制了。

2. 想要控制显示与隐藏的是一个布局文件,而非某个View。

因为设置给ViewStub的只能是某个布局文件的Id,所以无法让它来控制某个View。

所以,如果想要控制某个View(如Button或TextView)的显示与隐藏,或者想要在运行时不断的显示与隐藏某个布局或View,只能使用View的可见性来控制。

原文

http://blog.csdn.net/hitlion2008/article/details/6737537

分享到:
评论

相关推荐

    弹性ListView控件的实现 和 ViewStub 控件的应用

    弹性ListView控件的实现 和 ViewStub 控件的应用

    Android开发中ViewStub的应用方法

    在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在代码中动态的更改...

    Android笔记之:深入ViewStub的应用

    在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在代码中动态的更改...

    深入分析Android ViewStub的应用详解

    本篇文章是对Android ViewStub的应用进行了详细的分析介绍,需要的朋友参考下

    Android布局性能优化之按需加载View

    有时应用程序中会有一些很少用到的复杂布局。在需要它们的时候再加载可以降低内存的消耗,同时也可以加快界面的渲染速度。 定义ViewStub ViewStub是一个轻量级的View,它没有高宽,也不会绘制任何东西。所以它的加载...

    Android.UI基础教程]

    4.2.1ImageView和资源 4.2.2 位J图 4.2.3 Drawable 4.3 创建地图和展示网站 4.3.1 MapView4.3.2 WebView 4.4 结束语 第5章 可复用UI 5.1 抽象布局 5.1.1 标签 5.1.2 标签 5.1.3ViewStub 5.2 抽象样式和主题 5.2.1 ...

    Android典型技术模块开发详解

    目录 第一篇 Android开发初步 ...16.4 ViewStub 16.5 Bitmap内存溢出 16.5.1 图片预先缩放 16.5.2 普通的图片缩放方法 16.5.3 Dalvik虚拟机的堆内存分配 16.5.4 Bitmap对象及时释放 16.6 多分辨率适应 16.7 本章小结

    include标签的使用

    由于Android系统对硬件的要求较高,并且上层应用都是用Java(效率要比C++低)编写的,对程序的优化就成了程序员的日常工作了;Android的优化 可以从以下几个地方下手:布局优化、数据库优化、使用异步加载数据、使用...

    基于Android ListView之加载使用技巧

    程序员很多,遍地都是,高手也很多,但是懂设计的程序员并不多,我觉得我们不仅要成为一个coder还要成为一个...我手机装的应用并不多,稍微采集了一把手机上加载提示的应用截图。 以上是一些谷歌Play百度迅雷腾讯

    Android中使用include标签和merge标签重复使用布局

    这同样意味着,应用里多个布局里共同的元素可以被提取出来,独立管理,然后插入到每个布局里。 创建可复用布局 如果你已经知道哪个布局需要重用,就创建一个新的xml文件来定义布局。如,下面是一个来自G-Ken

    Android高级开发之性能优化典范

    本章介绍android高级开发中,...当这个操作耗时超过16.67ms时,就会出现掉帧现象,表现为应用卡顿,所以对重叠不可见元素的重复绘制会产生额外的开销,需要尽量减少Overdraw的发生。 (2)Overdraw检测  Android提供

Global site tag (gtag.js) - Google Analytics