ViewStub的使用

Posted sydmobile

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ViewStub的使用相关的知识,希望对你有一定的参考价值。

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

技术图片

以上是关于ViewStub的使用的主要内容,如果未能解决你的问题,请参考以下文章

单个viewStub中的多个布局

ViewStub的使用

如何检查 viewStub 是不是已经膨胀?

ViewStub的使用

Xamarin Android c# Viewstub 只工作一次,然后获取空指针

Android--UI之ViewStub