Android viewStub应用

1.viewstub是一个轻量级的 view,他是一个看不见的,不占布局位置,占用资源很小的控件。

可以为viewstub指定一个布局,在inflate布局的时候,只有viewstub会被初始化。然后当viewstub被设置为可见的时候,或者调用了inflate()的时候,viewstub所指向的布局就会被inflate和实例化,然后viewstub的布局属性都会传给所指向的布局,这样子,就可以使用viewstub来方便在运行时,有选择的显示某一个布局

viewstub特点:

他只能inflate一次,之后viewstub对象会被设置为空换句话说,某一个被viewstub指定的布局被inflate之后,这个ViewStub就从View层次中移除了,就不会再通过viewstub来控制他了

viewstub只能用来inflate一个布局文件,而不是某个具体的view,当然也可以吧某个view写在某个布局文件中

 viewstub_main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:gravity="center_horizontal">
  <ViewStub 
    android:id="@+id/viewstub_textview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dip"
    android:layout_marginRight="5dip"
    android:layout_marginTop="10dip"
    android:layout="@layout/viewstub_textview_layout"/>
  <ViewStub 
    android:id="@+id/viewstub_iamgeview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dip"
    android:layout_marginRight="5dip"
    android:layout="@layout/viewstub_imageview_layout"/>
</LinearLayout>

 当你准备inflate ViewStub时,调用inflate()方法即可。你还可以设定ViewStubVisibilityVISIBLEINVISIBLE,也会触发inflate。注意的是,使用inflate()方法能返回布局文件的根View
viewstub_textview_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
    <TextView
        android:id="@+id/viewstub_demo_textview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#aa664411"
        android:textSize="16sp"/>
</LinearLayout>

viewstub_imageview_layout.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/viewstub_demo_imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

代码:

 

package com.test;
import android.app.Activity;
import android.os.Bundle;
import android.view.ViewStub;
import android.widget.ImageView;
import android.widget.TextView;

public class ViewStubDemo extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.viewstub_main);
        if ((((int) (Math.random() * 100)))>50) {
            // to show text
            // all you have to do is inflate the ViewStub for textview
            ViewStub stub = (ViewStub) findViewById(R.id.viewstub_textview);
            stub.inflate();
            TextView text = (TextView) findViewById(R.id.viewstub_demo_textview);
            text.setText("我现在心情很不好,有的时候人是不是应该对自己狠一点," +
            		"或许真的应该来一个破釜沉舟,人生就是一个棋局,每一步都是一" +
            		"个赌博!失去一个棋子,只要将帅安在,不到最后,也不能断定就是输家");
        } else {
            // to show image
            // all you have to do is inflate the ViewStub for imageview
            ViewStub stub = (ViewStub) findViewById(R.id.viewstub_iamgeview);
            stub.inflate();
            ImageView image = (ImageView) findViewById(R.id.viewstub_demo_imageview);
            image.setImageResource(R.drawable.gallery_01);
        }
    }
}

结果:

随机数大于0.5小于1显示的结果:

随机数大于0小于0.5显示的结果:

 

 

 

 

转载于:https://my.oschina.net/amigos/blog/61250

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值