`
iaiai
  • 浏览: 2155653 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android ViewStub的应用

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

  在开发应用程序的时候,经学会遇到这样的情况,会在运行时动态根据条件来决定显示哪个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的可见性来控制。
分享到:
评论

相关推荐

    深入分析Android ViewStub的应用详解

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

    Android开发中ViewStub的应用方法

    在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把可能...  推荐的做法是使用android.view.ViewStub,ViewStub是一个轻量级的View,它一个看

    Android笔记之:深入ViewStub的应用

    在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把...推荐的做法是使用android.view.ViewStub,ViewStub是一个轻量级的View,它一个看不见的

    Android_UI_API最全中文文档

    Android_UI_API中文文档概述 ...Android_UI_API中文文档提供了丰富的UI控件和API接口,帮助开发者快速地搭建Android应用程序。同时,它也提供了多种XML属性和方法来设置控件的样式和行为,满足不同的需求。

    Android.UI基础教程]

    第1部分AndroidUI基础 第1章 入门 1.1 HeUoWorld 1.2 Android应用程序的基本结构 1.2.1文件夹结构 1. 2.2.AndroidManifest 1.2.3 资源 1.3 AndroidUI基础 1.3.1 主屏幕和通知栏1.3.2 XM[布局 1.3.3 ACTIVI'[Y类 ...

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

    每个ViewStub都可以使用android:layout属性指定要加载的布局。 下面这个ViewStub用于一个半透明的ProgressBar的加载。它只有在新工作开始时才会显示。 <ViewStub android:id=@+id/stub_import android:...

    Android典型技术模块开发详解

    第四篇 Android应用开发案例 第13章 Ksoap2 13.1 SOAP协议 13.1.1 请求 13.1.2 响应 13.2 WSDL介绍 13.3 Ksoap2应用——天气预报 13.4 Ksoap2参数类型 13.4.1 CXF框架的Web Service 13.4.2 Android端开发 13.5 Base...

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

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

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

    尽管Android提供了各种组件来实现小而可复用的交互元素,你也可能因为布局需要复用一个大组件。为了高效复用完整布局,你可以使用和标签嵌入另一个布局到当前布局。所以当你通过写一个自定义视图创建独立UI组件,你...

    基于Android ListView之加载使用技巧

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

    include标签的使用

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

Global site tag (gtag.js) - Google Analytics