欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ViewStub的使用

程序员文章站 2022-03-20 12:56:15
...

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

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

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

用法

// 在布局文件中,你就当做普通 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 来调整的话,这种是你在进入这个页面,布局上面所有的控件都会加载,是会浪费资源的(有了这个空白布局一直就处于不显示状态的话)

转载于:https://juejin.im/post/5ce3d26ee51d4510a5033517