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,用於在新增元件時識別,佈局檔案程式碼如下所示:
然後我們在Activity類裡邊進行新增元件,程式碼如下所示:<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>
/**
* 程式碼中,佈局的位置,是垂直順序排列的因為介面程式碼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
學會了上面的介紹,你就可以很輕鬆的佈局介面,無論是按鈕還是其他元件,對於佈局,你也可以很方便的進行佈局使用,以上就是在安卓中如何動態新增元件的方法 .
..