一、ViewStub是什么?

<ViewStub> 标签实质上是一个宽高都为 0 的不可见 的轻量级View。通过延迟按需加载布局的方式提升页面加载速度。

二、ViewStub使用场景

某布局默认是不可见,当满足特定场景才显示。比如网络异常提示、引导页等。

三、ViewStub怎么使用?

1、创建布局文件layout_test.xml(注:根标签可以是布局或控件,但不能为<merge>,子标签可以使用<merge>)

<TextViewxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="40dp"android:text="test"/>

2、通过ViewStub的android:layout指定懒加载的布局layout_test.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/button"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:text="测试" /><ViewStubandroid:id="@+id/viewStub"android:layout_width="match_parent"android:layout_height="300dp"android:layout="@layout/layout_test" />
</LinearLayout>

3、显示/隐藏布局

(1)只在满足条件进行显示

//方法1
viewStub.inflate()//方法2
viewStub.visibility = View.VISIBLE

注:ViewStub只能被Inflate一次,inflate之后ViewStub对象会被置空,就不能够再通过ViewStub来控制显隐。其中方法2内部也是通过调用inflate,所有ViewStub的setVisibility()和inflate()都只能调用一次

(2)需要根据条件进行显隐控制(通过ViewStub.inflate()返回的根布局进行显隐操作)

    private var mIsVisiable = falseprivate val mView: View by lazy { viewStub.inflate() }override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)button.setOnClickListener {if (mIsVisiable){mView.visibility = View.INVISIBLE}else{mView.visibility = View.VISIBLE}mIsVisiable = !mIsVisiable}}

ViewStub使用相关推荐

  1. Android布局优化之include、merge、ViewStub

    include:引入重复使用的相同布局 merge:减少include布局的层级,将子元素直接添加到merge标签的parent中 ViewStub:其实就是一个宽高都为0的一个View,它默认是不可 ...

  2. ViewStub 使用注意事项

    学而时习之,温故而知新. ViewStub,它是一个看不见的.不占布局位置.占用资源非常小的视图对象. ViewStub的加载原理 ViewStub只能加载一次,重复加载会导致异常,这是因为ViewS ...

  3. Android抽象布局——include、merge 、ViewStub

    在布局优化中,Androi的官方提到了这三种布局<include />.<merge />.<ViewStub />,并介绍了这三种布局各有的优势,下面也是简单说一 ...

  4. Android中使用ViewStub提高布局性能

    2019独角兽企业重金招聘Python工程师标准>>> 注,关于Stub的解释:在Java中,桩(stub)是指用来代替关联代码或者未实现代码的代码. ViewStub使用场景 如上 ...

  5. 布局技巧:使用ViewStub

    多亏了<include />标签,在Android里,很容易就能做到共享和重用UI组件.在Android开发中,很容易就能创建出复杂的UI结构,结果呢,用了很多的View,且其中的一些很少 ...

  6. include、ViewStub、merge优化布局标签

    前言 在写Android的xml布局时,用好 include.ViewStub.merge这三个标签,可以是我们的xml更加简洁.高效. include 按照官方的意思,include就是为了解决重复 ...

  7. Android性能优化之一:ViewStub

    Android性能优化之一:ViewStub 转载于:https://www.cnblogs.com/zhujiabin/p/5223196.html

  8. android 之ViewStub

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

  9. java.lang.IllegalStateException: ViewStub must have a non-null ViewGroup viewParent

    先贴问题 出现的原因: 在界面中添加了一个ViewStub控件 ,然后在代码中做了初始化 并初始化ViewStub中的A,B控件,之后在一个代码中的一个地方做了A,B控件的非空处理,在为空的时候重新调 ...

  10. 从源代码角度分析ViewStub 疑问与原理

    一.提出疑问 ViewStub比較简单.之前文章都提及到<Android 性能优化 三 布局优化ViewStub标签的使用>.可是在使用过程中有一个疑惑,究竟是ViewStub上设置的參数 ...

最新文章

  1. ACMNO.16用迭代法求 。求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001。 输出保留3位小数 输入 X 输出 X的
  2. 万字长文 | 23 个问题 TCP 疑难杂症全解析
  3. numpy逻辑运算符
  4. 电子科技大学计算机网络实验,计算机网络实验电子科技大学.doc
  5. (读书随笔)接口和抽象类的一些区别总结
  6. python def函数报错详解_Python函数详解
  7. 基于zeromq的高性能分布式RPC框架Zerorpc 性能测试
  8. Swift编程-闭包Closure
  9. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第1节 网络通信概述_4_IP地址...
  10. 私服脚本制作教程......
  11. 几何平均数和调和平均数是什么?有什么作用?详细资料讨论他们的区别
  12. android微信连wifi设置,微信小程序实现连接wifi功能的方法
  13. Teredo Tunnel Adapter: Error Code 10
  14. 手机突然电量消耗很快_手机电量消耗快是什么原因(手机电池电量突然猛掉)...
  15. C# 及excel中【总体方差】、【样本方差】的计算公式
  16. 偶遇Chrome浏览器“喔唷,崩溃啦”,错误代码(STATUS_STACK_BUFFER_OVERRUN)
  17. 软件測试系列之入门篇(一)
  18. labview 和lin 通讯_LABVIEW几种通讯应用1
  19. php行业八卦,Phpwind肖睿哲:与网站主合作信任最重要
  20. Java接入PayPal教程,Spring boot Demo源码,企业账号注册,支付,回调,退款全流程,最新PayPal SDK

热门文章

  1. 无线局域网安全协议(WEP、WPA、WAPI)
  2. 机器人学导论 一、空间变换(1)位姿,变换
  3. html5通讯录源码,通讯录web版
  4. 利用VS2005进行dump文件调试
  5. java teechart怎么用_TeeChart for Java
  6. android iso系统下载 百度云,Windows 7 SP1官方原版ISO系统镜像所有版本下载集合
  7. cad黑色背景变成白色_学会了、让你前程似锦的CAD完整版教程
  8. 用Java实现【万年历】
  9. BT种子文件(.torrent)的具体文件结构
  10. 【antd-design-vue】a-table取消组件自带的暂无数据图片