1. 程式人生 > >Android對話方塊--各種對話方塊 介面優美

Android對話方塊--各種對話方塊 介面優美

ndroid中對話方塊是非常常用的控制元件之一, google也提供了各種自定義對話方塊. 我覺得好多人都太模糊. 所以我全面的總結下.

對話方塊的幾種實現方式:

  1. Activity
  2. Popwindow 這個我之前詳細講過可以去看. popwindow詳解
  3. Dialog
  4. Fragment

關鍵類

  • AlertDialog
  • ProgressDialog
  • DialogFragment
  • Activity

[TOC]

AlertDialog

AlertDialog翻譯過來就是警示對話方塊, 其實就是一般的對話方塊也是最常用的, 相對於

這裡有個關鍵類: AlertDialog.Builder

. 屬於構造器模式用法.

這裡演示最簡單的對話方塊

程式碼

1234
AlertDialog.Builder builder = new AlertDialog.Builder(this);        builder.setTitle("標題");        builder.setMessage("資訊");        builder.show();

方法介紹

上面介紹了最基本的AlertDialog的使用. 但是在開發中需要更復雜的功能實現. 所以我會介紹下所有的方法

Builder是屬於AlertDialog的內部類. 負責建立AlertDiglog的構造器. 所以屬於鏈式程式設計.

正因為是構造器模式, AlertDialog的所有方法你都可以直接忽略, Builder已經實現了所有的功能. 並且AlertDialog是Protected許可權無法直接建立物件的.

確定和取消/中立按鈕

雖然叫做確定和取消按鈕, 不過你設定成別的名稱或者功能都可以.

12345678910111213
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {  @Override  public void onClick(DialogInterface dialog, int
which)
{ // 點選事件的回撥方法 }});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { }});

左邊按鈕(取消)

12345
AlertDialog.Builder setPositiveButton (int textId,  // 字串陣列資源id                DialogInterface.OnClickListener listener)AlertDialog.Builder setPositiveButton (CharSequence text,  // 字串                DialogInterface.OnClickListener listener)

右邊按鈕(確定)

12345
AlertDialog.Builder setNegativeButton (CharSequence text,                 DialogInterface.OnClickListener listener)AlertDialog.Builder setNegativeButton (int textId,                 DialogInterface.OnClickListener listener)

中立按鈕(隨便你寫啥). 這個按鈕位於取消和確定中間的一個.

12345
AlertDialog.Builder setNeutralButton (CharSequence text,                 DialogInterface.OnClickListener listener)AlertDialog.Builder setNeutralButton (int textId,                 DialogInterface.OnClickListener listener)

傳統選擇對話方塊

注意所有的條目選擇方法都不能和setMessage同時使用. 否則無效. 並且選中任何條目都將關閉對話方塊.

12345
AlertDialog.Builder setItems (int itemsId,                 DialogInterface.OnClickListener listener)AlertDialog.Builder setItems (CharSequence[] items,                 DialogInterface.OnClickListener listener)

MaterialDesign單選對話方塊

該對話方塊和傳統的單選對話方塊的區別是選中條目後可以不自動關閉對話方塊. 並且可以設定預設選中的條目.

12345678910111213141516
AlertDialog.Builder setSingleChoiceItems (int itemsId, // 資源陣列id                int checkedItem,  // 選中狀態的條目索引. 如果預設不選中任何, 寫-1                DialogInterface.OnClickListener listener)AlertDialog.Builder setSingleChoiceItems (ListAdapter adapter, // ListView的介面卡                int checkedItem,                 DialogInterface.OnClickListener listener)AlertDialog.Builder setSingleChoiceItems (Cursor cursor, // 用遊標來建立條目                int checkedItem,                 String labelColumn,                 DialogInterface.OnClickListener listener)AlertDialog.Builder setSingleChoiceItems (CharSequence[] items, // 字串陣列, 最常用簡單的.                int checkedItem,                 DialogInterface.OnClickListener listener)

多選對話方塊

123456789101112
AlertDialog.Builder setMultiChoiceItems (CharSequence[] items, // 條目陣列                boolean[] checkedItems,  // 選擇狀態陣列 ,如果不想預設選中任何, 可寫null                DialogInterface.OnMultiChoiceClickListener listener)AlertDialog.Builder setMultiChoiceItems (int itemsId,                 boolean[] checkedItems,                 DialogInterface.OnMultiChoiceClickListener listener)AlertDialog.Builder setMultiChoiceItems (Cursor cursor, // 採用遊標的方式                String isCheckedColumn,                 String labelColumn,                 DialogInterface.OnMultiChoiceClickListener listener)

引數介紹:

  • items : 沒什麼好講的. 條目的內容
  • checkedItems 這是一個布林型別陣列. 對應items的選擇狀態
  • listener 回撥監聽器

示例

1234567891011121314151617
final String[] itemTitles = {"象拔蚌", "鮑魚", "壽桃包"};builder.setMultiChoiceItems(itemTitles, null, new DialogInterface.OnMultiChoiceClickListener() {  /**  * 在選中對話方塊條目的時候回撥  * @param dialog 對話方塊, 可用於在該回調方法內部呼叫dismiss關閉對話方塊  * @param which 當前被選中的條目索引  * @param isChecked 被選擇狀態  */  @Override  public void onClick(DialogInterface dialog, int which, boolean isChecked) {    // 吐司    Toast.makeText(MainActivity.this, itemTitles[which], Toast.LENGTH_SHORT).show();    dialog.dismiss(); // 關閉對話方塊  }});

建立對話方塊的其他方法

這兩種方式很少使用. 因為相對比較複雜.

作用和setMultiChoiceItems以及setSingleChoiceItems一樣.

ListView介面卡

相當於使用ListView的介面卡ListAdapter來設定選擇條目的顯示內容. 可以顯示更加豐富的內容.

12
AlertDialog.Builder setAdapter (ListAdapter adapter,                 DialogInterface.OnClickListener listener)

Cursor遊標

詳情請去了解Cursor

123
AlertDialog.Builder setCursor (Cursor cursor,                 DialogInterface.OnClickListener listener,                 String labelColumn)

建立和顯示

123
AlertDialog create () // 建立只是返回一個AlertDialog物件. 並不會顯示該對話方塊AlertDialog show () // 直接顯示對話方塊

得到上下文

得到建立AlertDialog時所傳入的上下文物件.

1
Context getContext ()

是否可取消

預設為true, 即點選對話方塊外部會關閉對話方塊. 如果false則不會關閉

1
AlertDialog.Builder setCancelable (boolean cancelable)

標題

123
AlertDialog.Builder setTitle (CharSequence title)AlertDialog.Builder setTitle (int titleId)

上面的方法標題只是文字的形式而已. 而下面的方法可以在標題的位置自定義任何view物件來顯示.

1
AlertDialog.Builder setCustomTitle (View customTitleView)

標題圖示

即在標題的左邊加上一個圖片作為圖示顯示

123
AlertDialog.Builder setIcon (Drawable icon)AlertDialog.Builder setIcon (int iconId)

還有一個通過主題的屬性來設定對話方塊圖示. 我不懂

1
AlertDialog.Builder setIconAttribute (int attrId)

自定義對話方塊顯示

可以自定義對話方塊顯示任何內容. 注意即使你自定義了對話方塊. 你使用設定確定和取消按鈕

123
AlertDialog.Builder setView (int layoutResId) // 佈局檔案即可AlertDialog.Builder setView (View view) // View物件

監聽器

取消監聽器

取消監聽器是點選對話方塊外部的方式關閉了對話方塊. 呼叫dismiss方法關閉的時候不會回撥

1
AlertDialog.Builder setOnCancelListener (DialogInterface.OnCancelListener onCancelListener)

關閉監聽器

該監聽器是在AlertDialog呼叫了dismiss()方法或者點選了對話方塊外部都會回撥的監聽器.

1
AlertDialog.Builder setOnDismissListener (DialogInterface.OnDismissListener onDismissListener)

ListAdapter條目監聽器

該方法是你將ListAdapter設為對話方塊條目顯示的時候使用的方法

1
AlertDialog.Builder setOnItemSelectedListener (AdapterView.OnItemSelectedListener listener)

按鍵監聽器

可以接受按鍵的事件. 可用於在彈出對話方塊後遮蔽按鍵.

1
AlertDialog.Builder setOnKeyListener (DialogInterface.OnKeyListener onKeyListener)

ProgressDialog

除了以上的警示對話方塊的使用外. 還提供一種單獨的對話方塊樣式. 進度條對話方塊. 進度條是計算機應用歷史上一個偉大的發明.

1234
ProgressDialog progressDialog = new ProgressDialog(this);// 建立進度對話方塊物件progressDialog.setTitle("標題"); // 設定標題progressDialog.setMessage("載入中..."); // 設定訊息progressDialog.show(); // 顯示進度