zoukankan      html  css  js  c++  java
  • ViewStub的使用

    今天写一下 ViewStub ,内容很简单!

    ViewStub 是一个不可见的,没有尺寸,不会绘制任何东西的布局。主要用于实现 View 的延迟加载,可以避免浪费资源,减少布局的绘画,只有需要的时候才会加载。

    在 ViewStub 加载完成后就会被移除,它所占用的空间就会被新的布局替换。还是来说一下具体的用法,比较清晰。
    声明.png

    用法

    // 在布局文件中,你就当做普通 View 使用即可
    <?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:background="@color/colorAccent"
        android:orientation="vertical">
        <TextView
            android:id="@+id/tv"
            android:textColor="@android:color/white"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="内容区域"/>
    
        <ViewStub
            android:id="@+id/vs"
            android:layout_width="match_parent"
            android:layout_height="300dp"
                  // 当 ViewStub 加载后,就会被下面这个布局占用
            android:layout="@layout/activity_main"/>
    
    </LinearLayout>
    
    

    加载 ViewStub 的时候可以使用方法:

    findViewById(R.id.vs).setVisibility(View.VISIBLE);
    或者
    View view = (findViewById(R.id.vs).inflate());
    
    

    注意,如果你不调用上面的方法的话,ViewStub 是不会被加载的,包括 layout 属性中的布局,这也就是上面所说的减少资料,只有你需要了,调用上面的方法才会加载布局。一旦调用上面的方法后 ViewStub 就会变成 null 了。

    应用场景

    页面本身有一个布局,当由于某些错误,这个布局不加载的时候,这个时候你就可以让 ViewStub 加载你预留的空白布局了。如果提前写两套布局,根据状态使用 VISIBILBE 来调整的话,这种是你在进入这个页面,布局上面所有的控件都会加载,是会浪费资源的(有了这个空白布局一直就处于不显示状态的话)

    更多分享,公众号

  • 相关阅读:
    web前端要学哪些?
    angularjs factory,service,provider 自定义服务的不同
    PSP软件开发过程
    Eclipse连接sqlserver体验过程
    在线制作GIF图片项目愿景与范围
    C# Hashtable vs Dictionary 学习笔记
    Unity 工作经历+近期面试经历
    配置文件加载的一个坑
    rabbitmq exchange type
    centos7下nginx添加到自定义系统服务中提示Access denied
  • 原文地址:https://www.cnblogs.com/sydmobile/p/10901557.html
Copyright © 2011-2022 走看看