在实际开发中,ViewStub 在提升用户体验和优化性能方面都是有一定作用的!
ViewStub就是一个宽高都为0的一个View,它默认是不可见的,只有通过调用setVisibility函数或者Inflate函数才会将其要装载的目标布局给加载出来。也就是页面默认是不加载ViewStub所指向的View的,而ViewStub本身是一个轻量级的View,占用资源非常小的控件。
这就为我们一开始加载页面的时候省出来了资源,从而提升性能!

还有在一些页面我们需要延时加载的内容,我们也可以使用ViewStub,比如我们电商平台的产品详情页面,它底部的相关产品推荐,这个我们刚进入产品详情页面完全可以先不加载它,等我们的详情页面加载出来了我们在使用ViewStub.inflate(),让其显示出来!这样就能提升我们一开始加载页面的速度和内存开支!

还有就是我们在一些页面是需要根据不同的情况显示和隐藏一些控件,比如还是我们的产品详情页面,有些产品是带有优惠券的,有些则是不带的,这个时候我们带有优惠券的就需要把优惠券显示出来!我们用ViewStub,页面开始是用不加载优惠券相应的控件的,当有优惠券时我们再去加载,这样也就节省了很多资源!

我们一个页面可能看不出来多大的差别,感觉现在手机内存也都大了,不在乎那么一点内存!可是开发中我们明确的知道我们手机上的每个APP分到的实际内存还是很有限的!我们要是每个页面都能少开支一些,我们的APP性能将提升很多!

而我们的ViewStub 其实很简单,也是希望大家能够熟悉它并使用它!
这里需要注意的是ViewStub只能Inflate一次,之后会被置空,所以之后ViewStub是没有办法控制它指向的layout的!

下面给大家看一个简单的例子:

主页面UI,两个ViewStub

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_horizontal"><ViewStubandroid:id="@+id/viewstub_text1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dip"android:layout_marginRight="5dip"android:layout_marginTop="10dip"android:layout="@layout/text1_layout"/><ViewStubandroid:id="@+id/viewstub_text2"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dip"android:layout_marginRight="5dip"android:layout="@layout/text2_layout"/>
</LinearLayout>

text1_layout 的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="wrap_content"android:layout_height="wrap_content"><TextViewandroid:id="@+id/text1"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#ffffff"android:gravity="center"android:text="吃饭"android:textColor="@color/text_color"android:textSize="16sp"/>
</LinearLayout>

text2_layout 的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="wrap_content"android:layout_height="wrap_content"><TextViewandroid:id="@+id/text2"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#ffffff"android:gravity="center"android:text="睡觉"android:textColor="@color/text_color"android:textSize="16sp"/>
</LinearLayout>

Activity代码

public class MainActivity extends AppCompatActivity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);String str = getIntent.getStringExtra("type");if (str.equals("吃饭")) {ViewStub stub = (ViewStub) findViewById(R.id.viewstub_text1);stub.inflate();} else {ViewStub stub = (ViewStub) findViewById(R.id.viewstub_text2);stub.inflate();}}
}

ViewStub 简介相关推荐

  1. 优化 - 收藏集 - 掘金

    渐进式加载 - 提高用户体验度 - Android - 掘金 前言: 我们在PC端用浏览器看图片的时候,经常是先看到一张模糊图,然后再渐渐的变得清晰,这种情况在看漫画的时候尤其常见(模糊图如下),这种 ...

  2. Android 7.0 SystemUI 之启动和状态栏和导航栏简介

    Android 7.0 SystemUI 之启动和状态栏和导航栏简介 一.SystemUI 是什么 首先SystemUI 是一个系统应用,apk路径位于/system/priv-app 源码路径位于: ...

  3. Android性能优化:布局优化 详细解析(含include、ViewStub、merge讲解 )

    1. 影响的性能 布局性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如何影响性能 布局影响Android性能的实质:页面的测量 & 绘制时间 1个页面通过递归 完成测量 & ...

  4. android support v4 viewstub,Android 控件ViewStub

    Android ViewStub 01. 简介 A ViewStub is an invisible, zero-sized View that can be used to lazily infla ...

  5. Android UI性能优化——ViewStub和Merge的使用

    ViewStub的使用 简介 ViewStub 是一种没有任何维度的轻量型视图,它不会绘制任何内容或参与布局. ViewStub是一种没有大小,不占用布局的View. 直到当调用 inflate() ...

  6. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  7. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  8. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  9. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  10. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

最新文章

  1. SQL2K数据库开发二之查看和修改Sample数据库
  2. [云炬创业基础笔记]第二章创业者测试8
  3. java动态加载jar文件并执行方法
  4. 分隔list,让页面成多行多列遍列
  5. 电离辐射防护与辐射源安全基本标准_漳武南靖段A1项目成功举办桥面系 安全防护标准化观摩会...
  6. idea 调用c#接口_Dubbo 接口测试方法
  7. CSS3中的border-radius兼容IE低版本解决方法
  8. Oracle中开启并行和相关查询
  9. Median of Two Sorted Arrays@LeetCode
  10. matlab矩阵中每一行数除以一个数
  11. 计算机组成原理——总线
  12. 软件项目经理应具备的素质和条件_一个合格的软件项目经理应该具备哪些条件?...
  13. 【补丁】YYC松鼠短视频系统补丁,增加视频点赞数据管理功能,可修改点赞数量,V2.8的功能
  14. 谈谈堆排序,大顶堆,小顶堆
  15. 用JS写一个《俄罗斯方块》小游戏
  16. 沐风水库理论:企业微信生态营销秘密核武器
  17. 嵌入式Linux:安装Ubuntu系统环境
  18. 517编程3380造素数
  19. 苹果批Meta高额抽成行为:暴露了其虚伪面孔
  20. android canvas空心圆,用canvas画实心圆和空心圆的方法

热门文章

  1. nsis使用URLDownloadToFile下载文件
  2. 局域网不同网段远程桌面_自动化已非原来的自动化:看虚拟局域网技术应用到罗克韦尔的DCS...
  3. linux ppsspp速度,PPSSPP模拟器详细使用技巧
  4. cad2004教程_天正2014软件安装教程及下载地址
  5. Android逆向分析实例(三)-解密微信EnMicroMsg.db数据库
  6. GB2312、GBK、UTF-8 如何转换
  7. 盲盒商城源码|盲盒商城app开发的模式玩法、功能以及开发流程介绍,多套盲盒源码现成案例。让您在了解盲盒项目开发中少走弯路,少踩坑。
  8. 淘宝 NPM 镜像解决软件下载速度慢的问题
  9. s7 edge android 8,盖乐世S7/S7edge 正式开启Android 8.0系统内测活动
  10. EDIUS5.5快捷键大全