AlertDialog 就是警告提示,通常用在訊息的提示,比如說離開程序前,進行動作前等等,通常都會搭配按鈕讓使用者選擇,可以把它當作進階版的 Toast 視窗來使用,基本建構子如下,第1個參數為 context
ps: 參數context,必須是activity的context,不可為getApplicationContext()的Context,否則會出現
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application...的例外
AlertDialog ad = new AlertDialog.Builder(this).create();
API 11還有4種話框主題可以選擇,使用建構子的第2個參數來指定主題,另外第2個參數也可以使用 xml 來指定,ex: R.layout.xxx
AlertDialog ad = new AlertDialog.Builder(this,AlertDialog.THEME_DEVICE_DEFAULT_DARK).create();
AlertDialog ad = new AlertDialog.Builder(this,AlertDialog.THEME_DEVICE_DEFAULT_LIGHT).create();
AlertDialog ad = new AlertDialog.Builder(this,AlertDialog.THEME_HOLO_DARK).create();
AlertDialog ad = new AlertDialog.Builder(this,AlertDialog.THEME_HOLO_LIGHT).create();
AlertDialog ad = new AlertDialog.Builder(this,AlertDialog.THEME_TRADITIONAL).create();
其他較常用方法如下
ad.setTitle("標題");//設定警告標題
ad.setMessage("訊息");//設定警告內容
ad.setButton("按鈕1", new DialogInterface.OnClickListener() {//設定按鈕1
@Override
public void onClick(DialogInterface dialog, int which) {
//點選按鈕1後執行的動作
}
});
ad.setButton2("按鈕2", new DialogInterface.OnClickListener() {//設定按鈕2
@Override
public void onClick(DialogInterface dialog, int which) {
//點選按鈕2後執行的動作
}
});
ad.setButton3("按鈕3", new DialogInterface.OnClickListener() {//設定按鈕3
@Override
public void onClick(DialogInterface dialog, int which) {
//點選按鈕3後執行的動作
}
});
ad.setCanceledOnTouchOutside(false);//當警告提示出現後,點選提示以外範圍,是否會取消提示,預設是true
ad.setCancelable(false);//當警告提示出現後,點選其他實體按鈕(backkey等等),是否會取消提示,預設是true
ad.show();//顯示按鈕
結果為
在版權聲明流程中,點選離開後加入1個警告提示,程式碼如下
1: void showAlertDialog(){
2:
3: AlertDialog ad = new AlertDialog.Builder(this).create();
4:
5: ad.setTitle("警告");//設定警告標題
6: ad.setMessage("確定離開??");//設定警告內容
7: ad.setButton("確定", new DialogInterface.OnClickListener() {//設定按鈕1
8:
9: @Override
10: public void onClick(DialogInterface dialog, int which) {
11:
12: //點選按鈕1後執行的動作
13: //檢查網路狀態
14: ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
15:
16: NetworkInfo ni = cm.getActiveNetworkInfo();
17: if (ni != null && ni.isConnected()) {//若有網路先連結到外部網頁
18:
19: Uri uri = Uri.parse("http://vulpesadn.blogspot.tw/");
20: Intent intent = new Intent(Intent.ACTION_VIEW, uri);
21: startActivity(intent);
22:
23: finish();//再結束程序
24: } else if (ni == null) {//沒有網路
25:
26: finish();//結束程式
27: }
28: }
29: });
30: ad.setButton2("取消", new DialogInterface.OnClickListener() {//設定按鈕2
31:
32: @Override
33: public void onClick(DialogInterface dialog, int which) {
34:
35: //點選按鈕2後執行的動作
36: //無動作
37: }
38: });
39:
40: ad.setCanceledOnTouchOutside(false);//當警告提示出現後,點選提示以外範圍,是否會取消提示,預設是true
41:
42: ad.setCancelable(false);//當警告提示出現後,點選其他實體按鈕(backkey等等),是否會取消提示,預設是true
43:
44: ad.show();//顯示按鈕
45: }
結果為
1 意見:
very nice tutorial you can also check this one at
alert box with different theming
張貼留言