網頁

2010年8月5日 星期四

Android AlertDialog 教學(上)









AlertDialog(對話方塊)
很像是Android 的 MessageBox ,不過其實他的功能比windows上的 MessageBox 還要強大,且動作上不太相同。

1.windows的 MessageBox 只能顯示訊息,可以設定按鈕數量,
Android 的 AlertDialog 可以顯示訊息,還可以顯示列表,甚至可以是一個xml
也就是說,可以在layout編輯器裡新增一個表單(XML),裡可以放文字物件,EDITTEXT物件,按鈕物件,然後於AlertDialog 上顯示出來,也可以是或是選單(單選,複選都可)。

2.Windows上的MessageBox 是"阻塞"特性,就是當MessageBox 沒有被按下確定或是取消按鈕,程式不會繼續往下執行。
Android 的 AlertDialog 只是單存的對話方塊跳出來,程式會繼續往下執行,這裡還需注意。


1.先來依個最簡單的 對話方塊(AlertDialog)
程式碼如下

private void ShowAlertDialog()
{
Builder MyAlertDialog = new AlertDialog.Builder(this);
MyAlertDialog.setTitle("標題");
MyAlertDialog.setMessage("我是內容");
MyAlertDialog.show();
}





新增一個按鈕,加入可以更動訊息,讓這個對話方塊更好用
使用方法
ShowMsgDialog("哈哈哈");


private void ShowMsgDialog(String Msg)
{
Builder MyAlertDialog = new AlertDialog.Builder(this);
MyAlertDialog.setTitle("標題");
MyAlertDialog.setMessage(Msg);
DialogInterface.OnClickListener OkClick = new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which) {
//如果不做任何事情 就會直接關閉 對話方塊
}
};;
MyAlertDialog.setNeutralButton("中間按鈕",OkClick );
MyAlertDialog.show();
}






然而按鈕可以分成左邊,中間,右邊 來使用,
OkClick是按下時候處理的事件,因為示範所以只寫
OkClick
,實際上需要三個事件對應三個按鈕


//三個按鈕的對話方塊展示
private void ShowAlertDialogAnd3Button()
{
Builder MyAlertDialog = new AlertDialog.Builder(this);
MyAlertDialog.setTitle("標題");
MyAlertDialog.setMessage("我是內容");
//建立按下按鈕
DialogInterface.OnClickListener OkClick = new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which) {
//如果不做任何事情 就會直接關閉 對話方塊
}
};
MyAlertDialog.setPositiveButton("左邊按鈕",OkClick );
MyAlertDialog.setNeutralButton("中間按鈕",OkClick );
MyAlertDialog.setNegativeButton("右邊按鈕",OkClick );
MyAlertDialog.show();
}







對話方塊還可以使用LIST選單,以下示範單選
//有選單的對話方塊
final String[] ListStr = {"Android","其實","很簡單","且","如果選擇項目太多","Android也會","自動的可以拖曳喔!~","真好用"};

private void ShowAlertDialogAndList()
{

Builder MyAlertDialog = new AlertDialog.Builder(this);
MyAlertDialog.setTitle("標題");
//建立選擇的事件
DialogInterface.OnClickListener ListClick = new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which) {
ShowMsgDialog(ListStr[which]);

}
};
//建立按下取消什麼事情都不做的事件
DialogInterface.OnClickListener OkClick = new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which) {
}
};
MyAlertDialog.setItems(ListStr, ListClick);
MyAlertDialog.setNeutralButton("取消",OkClick );
MyAlertDialog.show();
}


項目太多自動生成可以拉動的選單。