Android ViewStub

ViewStub is a zero-sized invisible View which is used to load “layout resource” at runtime. ViewStub is a zero dimension View, so you will not see anything on the layout pallete.

To make parent resource visible, inflate() method is invoked. To make ViewStub visible or invisible, setVisibility(int) method is invoked. The View.VISIBLE constant is used for making ViewStub visible and View.GONE constant is used for invisible.

Example of ViewStub

Let’s create an example of ViewStub View that displays and hides an ImageView (image) created in another layout (my_layout.xml) file.

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:paddingBottom="@dimen/activity_vertical_margin"  
    android:paddingLeft="@dimen/activity_horizontal_margin"  
    android:paddingRight="@dimen/activity_horizontal_margin"  
    android:paddingTop="@dimen/activity_vertical_margin"  
    tools:context="com.ilovedeshi.MainActivity">  
  
    <ViewStub  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:id="@+id/viewStub"  
        android:layout_marginLeft="120dp"  
        android:layout="@layout/my_layout"  
        android:layout_alignParentTop="true" />  
  
    <Button  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="Show"  
        android:id="@+id/show"  
        android:layout_alignParentBottom="true"  
        android:layout_alignParentLeft="true"  
        android:layout_alignParentStart="true"  
        android:layout_marginLeft="65dp"  
        android:layout_marginStart="65dp" />  
  
    <Button  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="Hide"  
        android:id="@+id/hide"  
        android:layout_alignParentBottom="true"  
        android:layout_toRightOf="@+id/show"  
        android:layout_toEndOf="@+id/show"  
        android:layout_marginLeft="51dp"  
        android:layout_marginStart="51dp" />  
  
</RelativeLayout>
<?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">  
  
    <ImageView  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:id="@+id/imageView"  
        android:background="@drawable/image"  
        />  
  
</LinearLayout>  
package com.ilovedeshi.viewstubexample;  
  
import android.support.v7.app.AppCompatActivity;  
import android.os.Bundle;  
import android.view.View;  
import android.view.ViewStub;  
import android.widget.Button;  
  
public class MainActivity extends AppCompatActivity {  
    ViewStub viewStub;  
    Button show,hide;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        show=(Button)findViewById(R.id.show);  
        hide=(Button)findViewById(R.id.hide);  
        viewStub=(ViewStub)findViewById(R.id.viewStub);  
        viewStub.inflate();  
  
        show.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                viewStub.setVisibility(View.VISIBLE);  
            }  
        });  
        hide.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                viewStub.setVisibility(View.GONE);  
            }  
        });  
    }  
} 
android ViewStub 1

Leave a Comment