由做Android應用到做Android手機也有些時間了。總是覺得自己成長的太慢。
後仔細想來,自己沒有好好總結。學而不思則罔。今天就來好好總結下Android裡面的Dialog。
相信大家,都對用Dialog十分熟悉。有兩種方法,
一種是在Activity裡調用showDialog(int),然後在Dialog onCreateDialog裡創建Dialog返回,交由Activity來管理。
一種是自己直接用AlertDialog.Builder自己Create,然後自己調用show(),然後顯示。
我把話先說在前頭,建議用第一種方法去做,這會讓你省去很多麻煩,因為Activity已經幫我們管理Dialog,做了很多有用的事情。
還有幾個,很重要的概念,相信大家都也應該清楚:
1. 我們所有的應用程序所用到的dialog都是繼承自AlertDialog的,包括ProgressDialog,TimePickerDialog,DatePickerDialog等。
2. Dialog不同於Activity,它有自己的Window。
接下來,我們從兩種創建Dialog方法來分析吧。以ProgressDialog為例。
首先,我們來看下,ProgressDialog顯示出來的幾個部分吧。
總的來說,分三部分。
1. Message,Title,等。
2. 進度條,顯示百分比的字符等。
3.下面被隱藏的Button。
為什麼這麼說呢。請跟我看代碼,從第一種方法說起。即ActivitShowDialog(int)
- public final void showDialog(int id) {
- showDialog(id, null);
- }
- public final boolean showDialog(int id, Bundle args) {
- if (mManagedDialogs == null) {
- mManagedDialogs = new SparseArray<ManagedDialog>();
- }
- ManagedDialog md = mManagedDialogs.get(id);
- if (md == null) {
- md = new ManagedDialog();
- <span style="color:#000099;">md.mDialog = createDialog(id, null, args);</span>
- if (md.mDialog == null) {
- return false;
- }
- mManagedDialogs.put(id, md);
- }
-
- md.mArgs = args;
- <span style="color:#333399;"> onPrepareDialog(id, md.mDialog, args);
- md.mDialog.show();</span>
- return true;
- }
- private Dialog createDialog(Integer dialogId, Bundle state, Bundle args) {
- <span style="color:#000099;">final Dialog dialog = onCreateDialog(dialogId, args);</span>
- if (dialog == null) {
- return null;
- }
- <span style="color:#330099;">dialog.dispatchOnCreate(state);</span>
- return dialog;
- }