1. 程式人生 > >Android使用addView動態新增元件

Android使用addView動態新增元件

 在專案開發中,我們經常需要進行動態新增元件,其中可新增的部分有兩項:佈局和元件

 其中:

            新增的佈局主要有RelativeLayout型(相對佈局)的和LinearLayout(線性佈局)

            新增的元件主要有文字顯示框,編輯框,按鈕等元件。

首先我們建立一個新的專案,刪除MainActivity.class中沒有用的程式碼,僅留下protected void onCreate(Bundle savedInstanceState)函式

往佈局檔案中新增一個新的元件:

 1. addView方法簡介

   在Android中,addView(ViewGroup view, index)在指定的index處新增一個view。addView是繼承viewGroup的方法,

void android.view.ViewGroup.addView(View child);
void android.view.ViewGroup.addView(View child, LayoutParams params);
void android.view.ViewGroup.addView(View child,int index, LayoutParams params);

       其中需要注意的是 index ,在linearlayout中使用addView的時候,如果linearlayout方向是vertical 垂直, index代表新增的child的view在linearlayout的行數,index是0,表示新增的child在linearlayout頂部,-1為底部,可以利用排版View的 addView 函式,將動態產生的View 元件加入到排版View 中。

2、示例:

      (1)首先我們往佈局檔案中新增一個元件,比如一個文字,兩個按鈕,此時我們需要在佈局檔案中新增一個佈局項<LinearLayout>,定義其id為linearlay_1,用於在新增元件時識別,佈局檔案程式碼如下所示:

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="動態新增元件示例" 
        android:id="@+id/textview"/>
    <LinearLayout 
        android:layout_below="@+id/textview"
        android:id="@+id/linearlay_1"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:orientation="vertical"
        ></LinearLayout>
   然後我們在Activity類裡邊進行新增元件,程式碼如下所示:

   /**  

      * 程式碼中,佈局的位置,是垂直順序排列的因為介面程式碼Linerlayout的orientation設定的是
      * vertical的,但是為了美觀,需要設定新增的View的位置和樣式。在新增View的時候分
      * 為兩類來介紹,一種是佈局(例如:Linearlayout和RelativeLayout等,對於RelativeLayout屬於相對佈局)

      *注意,對於LinearLayout佈局來說,設定橫向還是縱向是必須的!否則就看不到效果了。

  */

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//繫結activity_main佈局檔案中的佈局項,其中R.id.lenearlay_1為佈局檔案中設定的id
		LinearLayout linear=(LinearLayout) findViewById(R.id.linearlay_1);
		//新增文字,this代表當前專案
		TextView tv=new TextView(this);
		tv.setText("示例文字框");
		tv.setId(1);//設定ID,可有可無,也可以在R檔案中新增字串,然後在這裡使用引用的方式使用
		linear.addView(tv);
		
	     // 將Button 加入到LinearLayout 中
	      Button b1 = new Button(this);
	      b1.setText("取消");
	      linear.addView(b1);
	 
	      // 將Button 2 加入到LinearLayout 中
	      Button b2 = new Button(this);
	      b2.setText("確定");
	      linear. addView ( b2 );
	 
	      // 從LinearLayout 中移除Button 1
	     // linear. removeView ( b1 );

	       
	}

}

效果如下圖所示:


圖 1 動態新增元件-LinearLayout

       (2) 動態添加布局:

/* 下面的例子將介紹如何動態添加布局,基本內容和上面的程式碼一致,主要注重如何控制新增的佈局的位置
* 在控制佈局的位置的時候使用LayoutParam類來實現。
 * 注意:控制位置和樣式的時候,佈局和控制元件使用的方法是一樣的。*/這次只是在MainActivity中進行操作,不涉及佈局檔案(.xml),其程式碼如下所示:

public class MainActivity extends Activity {
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	      //////////////////////////////////////
	      //建立一個相對佈局relative
		RelativeLayout relative = new RelativeLayout(this);
		relative.setBackgroundColor(Color.YELLOW);
		// 將Button1 加入到RelativeLayout 中
	      Button btn_r1 = new Button(this);
	      btn_r1.setText("取消");//設定顯示的字元
	      btn_r1.setId(24);
	      relative.addView(btn_r1);
	      
	      // 將Button2 加入到RelativeLayout 中
	      Button btn_r2 = new Button(this);
	      btn_r2.setText("確定");//設定顯示的字元	    
	      btn_r2.setId(25);
	      relative.addView(btn_r2); 
	                                                                                                                                                                  // 設定RelativeLayout佈局的寬高 
	        RelativeLayout.LayoutParams lp=new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
	        lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
	        lp.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 
	        btn_r1.setLayoutParams(lp);   ////設定按鈕的佈局屬性 
	        lp=new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
	        lp.addRule(RelativeLayout.RIGHT_OF, btn_r1.getId()); 
	        btn_r2.setLayoutParams(lp);   ////設定按鈕的佈局屬性 
	        setContentView(relative);
	}

}

效果如下所示:


圖 2 動態添加布局-RelativeLayout

學會了上面的介紹,你就可以很輕鬆的佈局介面,無論是按鈕還是其他元件,對於佈局,你也可以很方便的進行佈局使用,以上就是在安卓中如何動態新增元件的方法      .

..