天天看点

安卓控件使用系列31:ViewStub惰性装载控件的使用方法

ViewStub是安卓中的动态装载控件,作用和include相似,可以加载其他的布局文件。下面我们来介绍一个这个控件的使用方法。

实现的是上面有一个星行,下面是两个按钮,点击按钮用于动态添加布局和动态隐藏布局。

整体思路:新建一个xml文件,添加一个RatingBar控件,在原来的xml文件中添加一个include,指向这个新的xml文件,再添加一个ViewStub控件和二个Button控件;在活动中设置两个按钮的OnClick事件,在其中一个中写入把新建的xml文件中的RatingBar控件绑定到ViewStub控件上,并设置初始·的星数;在另一个中隐藏这个ViewStub控件。

activity_main.xml文件:

<!-- 静态加载布局文件 -->

 <include 
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     layout="@layout/next"
     />

 <!-- 动态加载布局文件 -->
 <LinearLayout 
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:background="#FFCCDD"
     >
     <ViewStub 
         android:id="@+id/stub"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout="@layout/next"
         />
 </LinearLayout>
      <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="动态添加布局" />
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="动态隐藏布局" />
           

next.xml文件:

<RatingBar
        android:id="@+id/ratingBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
           

MainActivity.java文件:

private Button button1,button2;
    private ViewStub viewStub;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button1=(Button)findViewById(R.id.button1);
		button2=(Button)findViewById(R.id.button2);
		viewStub=(ViewStub)findViewById(R.id.stub);
		button1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				//表示条填充动态布局
				View view=viewStub.inflate();
				LinearLayout layout=(LinearLayout)view;
				RatingBar bar=(RatingBar)layout.findViewById(R.id.ratingBar1);
				bar.setNumStars(3);
			}
		});
		
		button2.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				viewStub.setVisibility(View.GONE);//隐藏动态加载的布局
			}
		});
	}