天天看點

安卓控件使用系列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);//隐藏動态加載的布局
			}
		});
	}