AlertDialog的構造方法被聲明爲protected,因此不能直接使用new關鍵字來建立AlertDialog類的對象實例。要想建立AlertDialog對話框,須要使用Builder類,該類是AlertDialog類中定義的一個內嵌類。所以必須建立AlertDialog.Builder類的對象實例,而後再調用show()來顯示對話框。java
setPositiveButton(...)--確認、setNegativeButton(...)--取消、setNeutralButton(...)--忽略android
經過AlertDialog.Builder類的setItems(...)方法能夠建立簡單的列表對話框。其實,這種類型的對話框至關於將ListView組件放在對話框上,而後再在ListView中添加若干簡單的文本。數組
經過AlertDialog.Builder類的setSingleChoiceItems(...)來建立。目前支持4種數據源(數組資源、數據集、字符串數組、ListAdapter)緩存
經過AlertDialog.Builder類的setMultiChoiceItems(...)建立。目前支持3種數據源(數組資源、數據集、字符串數組)佈局
該類型的對話框是經過ProgressDialog來實現,該類是AlertDialog的子類,它不須要用create()方法來返回實例對象,只須要new便可。ui
ProgressDialog.STYLE_HORIZONTAL //水平進度樣式spa
ProgressDialog.STYLE_SPINNER //圓形樣式.net
直接使用XML佈局文件或以編寫JAVA代碼方式來建立視圖,並將這些視圖對象添加到對話框中去。code
Activity類中也提供了建立對話框的方式,有個onCreateDialog(int id)的方法,其返回類型是Dialog,經過是當調用Activity類的showDialog(int id)方法時,系統會調用該方法來返回一個Dialog對象。showDialog和onCreateDialog都有一個int類型的id參數,該參數值將傳遞給onCreateDialog方法。所以,咱們能夠利用不一樣的id建立多個對話框。對象
***注意***:對於表示某一個對話框的ID,系統只在第1次調用showDialog方法時調用onCreateDialog方法。在第1次建立Dialog對象時系統會將該對象保存在Activity的緩存裏,至關於一個Map對象,對話框的ID做爲Map的Key,而Dialog對象做爲Map的Value。下次再調用時,會先根據這個ID從Map中得到第1次建立的Dialog對象。除非該ID已經被刪除。
1).懸浮對話框:android:theme="@android :style/Theme.Dialog";對於該類型的對話框,觸摸屏幕任何位置都會觸發Activity的OnTouchEvent事件。
2).觸摸任何位置均可以關閉的對話框:首先必需要繼承AlertDialog類,並重寫OnTouchEvent事件。
<style name="dialog" parent="@android:style/Theme.Dialog"> <!-- 邊框 --> <item name="android:windowFrame">@null</item> <!-- 是否浮如今activity之上 --> <item name="android:windowIsFloating">true</item> <!-- 半透明 --> <item name="android:windowIsTranslucent">true</item> <!-- 無標題 --> <item name="android:windowNoTitle">true</item> <!-- 背景透明 --> <!-- <item name="android:windowBackground">@color/transparent</item> --> <item name="android:windowBackground">@drawable/icon_dialog_bg</item> <!-- 模糊 --> <item name="android:backgroundDimEnabled">true</item> </style>
使用:
Dialog dialog = new Dialog(getActivity(), R.style.dialog);