AlertDialog直接繼承自Dialog類,可以用于顯示确認提示框或者清單選擇框,還可以用于顯示有自定義布局的提示框,Android中内置的ProgressDialog、DatePickerDialog和TimePickerDialog都是繼承自于該對象。
AlertDialog的建立
AlertDialog的執行個體化函數是聲明的protected的,是以不能直接通過new AlertDialog(context)來建立,而是要通過它的一個子類Builder來建立,AlertDialog的很多屬性也是通過這個builder對象來實作的。
Java
public void showSimpleAlertDialog(View v){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//設定标題
builder.setTitle("Simple AlertDialog");
//設定提示内容
builder.setMessage("Do you want to visit www.bcoder.com now?");
//設定确定按鈕
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
//設定否定按鈕
builder.setNegativeButton("No", null);
//設定中性按鈕
builder.setNeutralButton("Cancel", null);
AlertDialog dlg = builder.create();
//顯示AlertDialog
dlg.show();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
publicvoidshowSimpleAlertDialog(Viewv){
AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
//設定标題
builder.setTitle("Simple AlertDialog");
//設定提示内容
builder.setMessage("Do you want to visit www.bcoder.com now?");
//設定确定按鈕
builder.setPositiveButton("Yes",newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
// TODO Auto-generated method stub
}
});
//設定否定按鈕
builder.setNegativeButton("No",null);
//設定中性按鈕
builder.setNeutralButton("Cancel",null);
AlertDialogdlg=builder.create();
//顯示AlertDialog
dlg.show();
}
AlertDialog的區域
AlertDialog從上到下共分3個區域,即标題區、内容區和控制按鈕區。
标題區用于顯示提示框的标題,給使用者簡單提示此提示框是什麼用途的。我們可以通過builder的setTitle方法來設定标題的内容。
内容區可以放置詳細的操作提示、資訊提示或者選擇清單,也可以使用自定義的Layout顯示更為豐富的内容。
按鈕區用于放置操作按鈕,最多可放置三個按鈕,一個确定按鈕,一個否定按鈕,一個中性按鈕,就如Windows程式中常見的“是、否和取消。我們可以通過setPositiveButton、setNegativeButton和setNeutralButton來設定三個按鈕的顯示内容和點選時的響應函數
在AlertDialog中顯示一個選擇清單
AlertDialog.Builder提供了幾種方法可以用于在内容區域顯示一個可選擇的清單框,這幾種方法分别是setAdapter、setItems、setSingleChoiceItems、setMultiChoiceItems。
setItems(int itemsId, final OnClickListener listener)可以傳入一個CharSequence資料或者一個數組資源R.array,但是此方法顯示的清單的樣式沒辦法改變,隻能使用AlertDialog預設的樣式,而且隻能顯示一列,資料隻能是字元串類型。如果給後面的listener傳入null值則點選清單的項目後視窗不會自動關閉。
setAdapter可以傳入一個ListAdapter,開發者可以通過這個ListAdapter對象設計複雜的清單布局,以增加程式的可視化效果。
setSingleChoiceItems可以打開一個右側帶單選按鈕的提示框,可接受CharSequence數組、資源數組、ListAdapter、Cursor對象,傳入CharSequence數組、資源數組時右側會顯示一個單選按鈕,傳入ListAdapter時右側無單選按鈕,需要自己來實作單選按鈕,Cursor未測試。當選擇某項時,提示框不會自己關閉,而是要通過傳回鍵或者下面的按鈕來關閉提示框。
setMultiChoiceItems可以打開一個右側帶複選按鈕的提示框,可接受CharSequence數組、資源數組、Cursor對象,不知道為什麼沒有支援ListAdapter。
AlertDialog中顯示自定義部局
當我們需要一個複雜的提示框的時候,我們可用自定義的Layout來填充到AlertDialog視窗中。這裡主要用到的是Builder的setView方法。我們可以先用getLayoutInflater()或者getActivity().getLayoutInflater()來擷取一個LayoutInflater對象,然後用View dlgV=inflater.inflate(R.layout.custom_dialog, null);得到一個View對象,然後再用setView方法将自定義部局填充到AlertDialog中。
雖然我們可以在自定義部局中設計自己的标題和按鈕,但我們仍然還可以使用setTitle和setPositiveButton等方法來使用AlertDialog中的标題欄和按鈕。
如果我們想将一個Activity轉換成一個Dialog,并不需要再建立一個AlertDialog然後重新實作這些代碼,隻需要在AndroidManifest.xml中将Activity的Theme設定為Dialog樣式的主題即可,如:
XHTML
1
AlertDialog内容區域的優先級
AlertDialog中詳細提示資訊和選擇清單是不能同時顯示的,幾個方法的優先顯示順序為setMessage、setAdapter、setItems
Activity如何轉換成Dialog
當我們想把一個Activity轉換成Dialog時,如果再建立一個AlertDialog或者DialogFragment來實作的話,很多代碼都要進行修改,比如DialogFragment需要增加getActivity來實作對Activity的一些方法進行通路,也不支援設計時設定的android:onclick屬性,需要在java代碼中用setOnClickListener來執行單擊事件,這樣做起來相當的麻煩。
那麼比較簡單的方法就是通過在AndroidManifest.xml中給該Activity設定一個Dialog使用的Theme來進行支援,這樣做的缺點是如果使用的不是android的主題則需要自己寫一個符合程式的主題。
XHTML
1
如何設定AlertDialog的樣式
我們需要先定義一個樣式,在res/values/style.xml中定義一個MyAlertDialog的樣式(此方法暫時不可用,設定效果總不是想要的效果,再研究後再釋出過來)
XHTML
@drawable/bottom_nav_button
true
@android:dimen/dialog_min_width_major
@android:dimen/dialog_min_width_minor
1
2
3
4
5
6
@drawable/bottom_nav_button
true
@android:dimen/dialog_min_width_major
@android:dimen/dialog_min_width_minor
在代碼中,建立builder的時候傳入這個樣式名稱,如下:
Java
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialog);
1
AlertDialog.Builderbuilder=newAlertDialog.Builder(this,R.style.MyAlertDialog);
打賞
微信掃一掃,打賞作者吧~