歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 關於Android裡的Dialog

關於Android裡的Dialog

日期:2017/3/1 11:13:13   编辑:Linux編程

由做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)

  1. public final void showDialog(int id) {
  2. showDialog(id, null);
  3. }
  4. public final boolean showDialog(int id, Bundle args) {
  5. if (mManagedDialogs == null) {
  6. mManagedDialogs = new SparseArray<ManagedDialog>();
  7. }
  8. ManagedDialog md = mManagedDialogs.get(id);
  9. if (md == null) {
  10. md = new ManagedDialog();
  11. <span style="color:#000099;">md.mDialog = createDialog(id, null, args);</span>
  12. if (md.mDialog == null) {
  13. return false;
  14. }
  15. mManagedDialogs.put(id, md);
  16. }
  17. md.mArgs = args;
  18. <span style="color:#333399;"> onPrepareDialog(id, md.mDialog, args);
  19. md.mDialog.show();</span>
  20. return true;
  21. }
  22. private Dialog createDialog(Integer dialogId, Bundle state, Bundle args) {
  23. <span style="color:#000099;">final Dialog dialog = onCreateDialog(dialogId, args);</span>
  24. if (dialog == null) {
  25. return null;
  26. }
  27. <span style="color:#330099;">dialog.dispatchOnCreate(state);</span>
  28. return dialog;
  29. }
Copyright © Linux教程網 All Rights Reserved