Android dialog使用總結


       對話框就是用來在界面里彈出,讓用戶選擇的窗口,一般都是 “半透明的背景 + 標題 + 內容說明 + 確認/取消” 這樣的形式。對話框就是告訴用戶一定要做一個操作才能往下進行,這個在官方文檔里面叫modal events(模態事件)。

下面總結一下Android下面對話框的使用。

一般常用的dialog

Android的dialog使用一般的流程是:

提示對話框AlertDialog

1、使用builder或者構造函數初始化

2、setTitle 、setMessage 設置dialog的內容 

3、setPositiveButton(設置確認按鈕的顯示和按下的行為),setNegativeButton(設置取消按鈕的顯示和按下的行為),setNeutralButton(設置中性按鈕的顯示和按下的行為) 設置要顯示的按鈕和按鈕相應的處理,setIcon可以設置標題旁邊的圖標顯示的圖片

4、調用Crete(),創建這個AlertDialog

4、調用show()顯示對話框

 1             AlertDialog.Builder builder = new  AlertDialog.Builder(this).setTitle("yes").setMessage("Are you sure ?").setIcon(R.drawable.ic_launcher);
 2             builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
 3                 
 4                 @Override
 5                 public void onClick(DialogInterface dialog, int which) {
 6                     // TODO Auto-generated method stub
 7                     Log.d(TAG, "which = "+which+",DialogInterface.BUTTON_NEGATIVE="+DialogInterface.BUTTON_NEGATIVE);
 8                 }
 9             });
10             builder.setNeutralButton("幫助", new DialogInterface.OnClickListener() {
11                 
12                 @Override
13                 public void onClick(DialogInterface dialog, int which) {
14                     // TODO Auto-generated method stub
15                     Log.d(TAG, "which = "+which+",DialogInterface.BUTTON_NEUTRAL="+DialogInterface.BUTTON_NEUTRAL);
16                 }
17             });
18             builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
19                 
20                 @Override
21                 public void onClick(DialogInterface dialog, int which) {
22                     // TODO Auto-generated method stub
23                     Log.d(TAG, "which = "+which+",DialogInterface.BUTTON_POSITIVE="+DialogInterface.BUTTON_POSITIVE);
24                 }
25             });
26             
27             AlertDialog ad = builder.create();
28             ad.setCancelable(true);
29             ad.setCanceledOnTouchOutside(false);
30             ad.show();

還有兩個解釋的點
1、ad.setCancelable(true)這個是指是否響應BACK鍵,然后關閉dialog

ad.setCanceledOnTouchOutside(false)是指用戶去摸dialog之外的空間是否關閉dialog
我現在做的項目一般就是這樣設置的,至於默認這兩個的值是true還是false,好像4.0的前后是有差別的,其實每次設置一下就好了。

2、這個可以每一個按鍵都new一個匿名類,或者幾個按鍵幾個dialog都使用一個 dialogDialogInterface.OnClickListener
因為onClick(DialogInterface dialog, int which)這個函數的兩個入參夠從來區分dialog和按鍵了

 

Alertdialog可以使用列表和adapter來作為單選或者多選的對話框,使用setAdapter()

 1             AlertDialog.Builder build2 = new  AlertDialog.Builder(this).setTitle("請選擇喜歡球員").setIcon(R.drawable.ic_launcher);
 2             build2.setAdapter(new ArrayAdapter<String>(this,R.layout.alert_item, new String[]{"大羅","小羅","c羅"}), new DialogInterface.OnClickListener() {
 3                 
 4                 @Override
 5                 public void onClick(DialogInterface dialog, int which) {
 6                     // TODO Auto-generated method stub
 7                     Log.d(TAG, "which="+which);
 8                 }
 9             });
10             AlertDialog ad2 = build2.create();
11             ad2.setCancelable(true);
12             ad2.setCanceledOnTouchOutside(false);            
13             ad2.show();

 

R.layout.alert_item的內容就是一個textView
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/alert_item_text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="14sp"
    android:padding="10dp"
 />



Alertdialog可以變成多選對話框,使用setMultiChoiceItems(或者setSingleChoiceItems變單選使用方式差不多)
 1 AlertDialog.Builder build3 = new AlertDialog.Builder(this)
 2                     .setTitle("請選擇你喜歡的水果(多選)").setIcon(R.drawable.ic_launcher);
 3             // 第一個字符串數組是用來設置顯示的選項列表,第二個boolean的數組是用來設置默認是否checked的選項
 4             // 這個的回調onClick,有三個參數,多了一個checked的參數,作用不用多說
 5             build3.setMultiChoiceItems(new String[] { "蘋果", "香蕉", "梨" },
 6                     new boolean[] { true, false, true },
 7                     new DialogInterface.OnMultiChoiceClickListener() {
 8 
 9                         @Override
10                         public void onClick(DialogInterface dialog, int which,
11                                 boolean isChecked) {
12                             // TODO Auto-generated method stub
13                             Log.d(TAG, "which=" + which + ",isChecked="
14                                     + isChecked);
15                         }
16 
17                     });
18             build3.setNegativeButton("取消",
19                     new DialogInterface.OnClickListener() {
20 
21                         @Override
22                         public void onClick(DialogInterface dialog, int which) {
23                             // TODO Auto-generated method stub
24                             Log.d(TAG, "which = " + which
25                                     + ",DialogInterface.BUTTON_NEGATIVE="
26                                     + DialogInterface.BUTTON_NEGATIVE);
27                         }
28                     });
29             build3.setPositiveButton("確定",
30                     new DialogInterface.OnClickListener() {
31 
32                         @Override
33                         public void onClick(DialogInterface dialog, int which) {
34                             // TODO Auto-generated method stub
35                             Log.d(TAG, "which = " + which
36                                     + ",DialogInterface.BUTTON_POSITIVE="
37                                     + DialogInterface.BUTTON_POSITIVE);
38                         }
39                     });
40             AlertDialog ad3 = build3.create();
41             ad3.setCancelable(true);
42             ad3.setCanceledOnTouchOutside(false);
43             ad3.show();
 

 

日期、時間 選擇對話框DatePickerDialog、TimePickerDialog

1、使用初始化函數新建DatePickerDialog、TimePickerDialog

2、設置時間、日期設置處理函數

3、設置日期和時間,包括最大最小可選擇的日期和時間

 

DatePickerDialog
 1             Calendar ca = Calendar.getInstance();
 2             DatePickerDialog datePickerDialog = new DatePickerDialog(this, new OnDateSetListener() {
 3                 
 4                 @Override
 5                 public void onDateSet(DatePicker view, int year, int monthOfYear,
 6                         int dayOfMonth) {
 7                     // TODO Auto-generated method stub
 8                     Log.d(TAG, "year="+year+",monthOfYear="+monthOfYear+",dayOfMonth="+dayOfMonth);
 9                 }
10             }, ca.get(Calendar.YEAR), ca.get(Calendar.MONTH), ca.get(Calendar.DAY_OF_MONTH));
11             datePickerDialog.show();

 

TimePickerDialog
 1             Calendar caTime = Calendar.getInstance();
 2             TimePickerDialog timePickerDialog = new TimePickerDialog(this, new OnTimeSetListener() {
 3                 
 4                 @Override
 5                 public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
 6                     // TODO Auto-generated method stub
 7                     Log.d(TAG, "hourOfDay="+hourOfDay+",minute="+minute);
 8                 }
 9             }, caTime.get(caTime.HOUR_OF_DAY), caTime.get(caTime.MINUTE), true);
10             timePickerDialog.show();

 

進度對話框progressDialog

ProgressDialog其實用法和其他dialog差不多,但是,下面的代碼說的很清楚,ShowPbTask就是一個
 1             //如果只是簡單的顯示一下進度條,直接就可以用ProgressDialog的靜態類
 2             //ProgressDialog.show(context, title, message);
 3             mPd = new ProgressDialog(this);
 4             // ProgressDialog.STYLE_SPINNER---就是轉圈,要顯示進度可以自己setMessgae去設置
 5             // ProgressDialog.STYLE_HORIZONTAL---顯示你setPorgess的值
 6             //mPd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
 7             mPd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
 8             mPd.setTitle("正在處理");
 9             //設置進度條顯示的最大值
10             mPd.setMax(100);
11             mPd.setCancelable(true);
12             mPd.setCanceledOnTouchOutside(false);            
13             mPd.show();
14             // 一般progressDialog都會搭配一個后台的進程使用,下面的這個就是用AsyncTask來模擬一下更新的過程,更新使用mPd.setProgress或者setMessage來更新
15             mShowPbTask = new ShowPbTask();
16             mShowPbTask.execute();  
兩種樣式的progressdialog

 

自定義樣式的dialog

1、自定義的layout,inflate成view

2、把這個view通過dialog的setview,設置到dialog中,至於按鍵的處理需要自己去設置onlicklistener來處理,和普通的控件處理出不多

3、show()

 

cancel和dismiss關閉dilaog

 cancel和dismis都是用來關閉dialog的,那有啥區別呢:下面的代碼來着Dialog.java,它的注釋已經說的很清楚了

  cancel也會調用dismiss,cancel會調用你定義的OnCancelListener(如果有通過setOnCancelListener注冊過)

 1     /**
 2      * Cancel the dialog.  This is essentially the same as calling {@link #dismiss()}, but it will
 3      * also call your {@link DialogInterface.OnCancelListener} (if registered).
 4      */
 5     public void cancel() {
 6         if (!mCanceled && mCancelMessage != null) {
 7             mCanceled = true;
 8             // Obtain a new message so this dialog can be re-used
 9             Message.obtain(mCancelMessage).sendToTarget();
10         }
11         dismiss();
12     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM