天天看點

Java裡的AlertDialog_AlertDialog使用總結

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);

打賞

Java裡的AlertDialog_AlertDialog使用總結

微信掃一掃,打賞作者吧~