ViewStub可以实现,布局的异步填充。当需要使用某一部分布局的时候,再去把它加载出来。
     
        有点像苹果中的懒加载。什么时候需要,什么时候加载出来,节约内存空间,提高流畅度。
     
        有两种方法去实现:
     
               方法一(for example:vs_view1):
                   已在XML中写入布局ID(android:layout="@layout/viewstub_layout1"),直接inflate填充。
     
     
              方法二(for example:vs_view2):
                   没有在XML中写入布局ID,需要设置布局ID后(setLayoutResource),inflate填充。
     
           注意事项:

1.ViewStub.inflate();只能加载一次,加载之后会不可改变布局。

源代码Demo:demo下载地址点击下载

废话不说直接贴代码

布局如下:

MainActivity 布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="5dp"tools:context="com.terry.viewstub.viewstubdemo.MainActivity"><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="viewstub" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/but_switch_1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Show_VS1" /><Buttonandroid:id="@+id/but_switch_2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Show_VS2" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/holo_green_light"android:orientation="horizontal"><ViewStubandroid:id="@+id/vs_view1"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:layout="@layout/viewstub_layout1"/><ViewStubandroid:id="@+id/vs_view2"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1" /></LinearLayout></LinearLayout>

viewStub1布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"app:srcCompat="@mipmap/img_vs"android:id="@+id/imageView" />
</LinearLayout>

viewStub2布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:layout_width="match_parent"android:layout_weight="1"android:layout_height="0dp"app:srcCompat="@mipmap/img_1"android:id="@+id/imageView" /><ImageViewandroid:layout_width="match_parent"android:layout_weight="1"android:layout_height="0dp"app:srcCompat="@mipmap/img_2"android:id="@+id/imageView2" />
</LinearLayout>

MainActivity:

package com.terry.viewstub.viewstubdemo;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewStub;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {ViewStub vs_view1,vs_view2;Button but_switch_1,but_switch_2;boolean isOpenvs1 = false, isOpenvs2 = false;TextView tv_title;View view1,view2;/****  Author:    TerryYue**  Email:    yue_zg@163.com**  ReadMe:*             ViewStub可以实现,布局的异步填充。当需要使用某一部分布局的时候,再去把它加载出来。**      有点像苹果中的懒加载。什么时候需要,什么时候加载出来,节约内存空间,提高流畅度。**      有两种方法去实现:**          方法一(for example:vs_view1):*              已在XML中写入布局ID(android:layout="@layout/viewstub_layout1"),直接inflate填充。***          方法二(for example:vs_view2):*              没有在XML中写入布局ID,需要设置布局ID后(setLayoutResource),inflate填充。**  注意事项:*      1.ViewStub.inflate();只能加载一次,加载之后会不可改变布局。*/View.OnClickListener listener =  new View.OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.but_switch_1://方法一:已在XML中写入布局ID(android:layout="@layout/viewstub_layout1"),直接inflate填充if (view1==null) {view1 = vs_view1.inflate();//每个ViewStub只能加载一次}if (isOpenvs1){view1.setVisibility(View.GONE);}else {view1.setVisibility(View.VISIBLE);}isOpenvs1 = !isOpenvs1;tv_title.setText("isOpenvs1 = "+isOpenvs1+" - isOpenvs2 = "+isOpenvs2);break;case R.id.but_switch_2://方法二:没有在XML中写入布局ID,需要设置布局ID后(setLayoutResource),inflate填充if (view2==null) {vs_view2.setLayoutResource(R.layout.viewstub_layout2);view2 =  vs_view2.inflate();//每个ViewStub只能加载一次}if (isOpenvs2){view2.setVisibility(View.GONE);}else {view2.setVisibility(View.VISIBLE);}isOpenvs2 = !isOpenvs2;tv_title.setText("isOpenvs1 = "+isOpenvs1+" - isOpenvs2 = "+isOpenvs2);break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);but_switch_1 = (Button)findViewById(R.id.but_switch_1);but_switch_2 = (Button)findViewById(R.id.but_switch_2);vs_view1 = (ViewStub)findViewById(R.id.vs_view1);vs_view2 = (ViewStub)findViewById(R.id.vs_view2);tv_title = (TextView)findViewById(R.id.tv_title);but_switch_1.setOnClickListener(listener);but_switch_2.setOnClickListener(listener);tv_title.setText("isOpenvs1 = "+isOpenvs1+" - isOpenvs2 = "+isOpenvs2);}}

ViewStub 测试Demo By Terry相关推荐

  1. Delphi开发的IOCP测试Demo以及使用说明。

    Delphi开发的IOCP,此为压力测试Demo和使用说明.

  2. android xml解析demo,Android解析自定义xml文件--Sax解析xml文件,测试demo(方案二)...

    转载请注明出处:http://blog.csdn.net/droyon/article/details/9346657 Sax解析xml 以下是测试Demo 运行程序类 public class Te ...

  3. 云之讯官方测试Demo音频版源码阅读(编辑)

    * 由于最近项目中貌似需要做这一块,于是就去读了一下云之讯官方测试Demo的音频版的源码[Android音频版](http://www.ucpaas.com/product_service/downl ...

  4. 合宙ESP32S3 CameraWebServe 测试demo

    合宙ESP32S3 CameraWebServe 合宙ESP32S3 CameraWebServe测试,我们需要一个OV2640的摄像头模组用来采集图像传输给ESP32的,这里使用的OV2640是之前 ...

  5. Open-unmix测试demo

    概述 Pytorch官网https://pytorch.org/hub/提供了许多已经训练好的模型,其中Open-unmix是一个音乐分离的参考模型,将音频信号分离成vocals.bass.drums ...

  6. 真正可用win10 x64位twain协议虚拟扫描仪.net C#Twain连接打印机扫描仪winform测试demo

    PS:有人反馈说用不了,卡死或没有反应,其实一般是精简版系统的问题. 正常情况下,电脑装了摄像头,twain协议也能直接调用摄像头,如果测试电脑摄像头都调用不了,请先从操作系统解决的. 发出来的原因还 ...

  7. 后端 乐橙云开放平台获取管理员token测试demo

    乐橙云开放平台获取管理员token测试demo 前端页面文档 django配置 测试代码 前端页面文档 html <!DOCTYPE html> <html lang="e ...

  8. 云之讯官方测试Demo音频版源码阅读

    由于最近项目中貌似需要做这一块,于是就去读了一下云之讯官方测试Demo的音频版的源码Android音频版. 其实这个Demo并不是什么高大上的代码,也没有很多生涩难懂的代码在里面,相反,读起来还是很轻 ...

  9. 3D视觉感知新SOTA BEVFormer复现nuscenes数据集测试demo

    0 写在前面 分享最近在BEV感知方面的工作,欢迎自动驾驶同行交流学习,助力自动驾驶早日落地. 1.概述 对于自动驾驶而言,BEV(鸟瞰图)下的目标检测是一项十分重要的任务.尽管这项任务已经吸引了大量 ...

最新文章

  1. Kotlin中var和val的区别
  2. fruncm server sql 无法生成 线程_MSSQLSERVER启动不了,报SQL Server 无法生成 FRunCM 线程...
  3. sublime text html乱码,Sublime Text 2中文显示乱码的解决方法
  4. java怎么处理ajax请求,java怎么用ajax请求?jquery ajax请求后台的简单例子
  5. 雷军微博正式“确认”:Redmi Note 9 5G高配版处理器就是它
  6. java访问方法修饰词四个_java中的四个修饰词(访问权限)
  7. maven 内存不足_如何修复Maven内存不足问题
  8. 【转载】进程与线程的区别
  9. HTML5网页设计图片如何,网页设计中优化图片的6个技巧
  10. rtx服务器设置 文件,rtx 服务器 文件传输 配置
  11. 二维码20项应用模式大盘点
  12. Cadedce Allegro 里面怎么切线删除一条线上的某一段
  13. 深度学习秋招面试题集锦(一)
  14. 股市基础知识、内盘和外盘与股票走势
  15. TMC260系列电机驱动芯片应用介绍
  16. box-sizing:border-box 解释
  17. ·144. 二叉树的前序遍历(前中后总结)
  18. 群晖7.1.0万兆网络实测
  19. 电脑桌面云便签软件忘记锁屏密码怎么重新设置?
  20. 69.Android之天气预报app

热门文章

  1. CAS:103302-15-4/D-赤藓糖-4-磷酸钠盐/1.D-Erythrose 4-phosphate sodium
  2. 阿里巴巴java开发手册(公开版)
  3. Hive查询的18种方式,你都学会了吗?
  4. 互联网江湖,桌面客户端框架技术比武大会
  5. 我的世界工业服务器发展最快,《我的世界》中国版服务器快速发展攻略 发展思路及心得分享...
  6. 男人对付烧钱女友的十大狠招
  7. SNAP:哨兵3 OLCI level-1B产品处理
  8. 2023 Chatgpt易语言源码
  9. 《火球——UML大战需求分析》(第1章 大话UML)——1.1 UML基础知识扫盲
  10. 乐视电视s50 android,乐视电视机怎么样 乐视S50电视特点介绍【详解】