android Dialog

Android--Dialog详细讲解
转自:http://www.kwstu.com/ArticleView/kwstu_20139682354515 

前言html

  对话框对于应用也是必不可少的一个组件,在Android中也不例外,对话框对于一些提示重要信息,或者一些须要用户额外交互的一些内容颇有帮 助。本篇博客就讲解一下Android下对话框的使用,在本篇博客中,将了解到对话框的一些常规属性的设置,以及各式的对话框的使用,并都会提供小 Demo来展现全部的效果。java

Dialogandroid

  Dialog,对话框,一个对话框就是一个小窗口,并不会填满整个屏幕,一般是以模态显示,要求用户必须采起行动才能继续进行剩下的操做。数组

  Android提供了丰富的对话框支持,它提供了以下4中经常使用的对话框:app

  • AlertDialog:警告对话框,使用最普遍功能最丰富的一个对话框。
  • ProgressDialog:进度条对话框,只是对进度条进行了简单的封装。
  • DatePickerDialog:日期对话框。
  • TimePickerDialog:时间对话框。

  全部的对话框,都是直接或间接继承自Dialog类,而AlterDialog直接继承自Dialog,其余的几个类均继承自AlterDialog。ide

 

AlertDialog函数

  AlertDialog继承自Dialog类,对于Android内置的AlterDialog,它能够包含一个标题、一个内容消息或者一个选择列表、最多三个按钮。而建立AlterDialog推荐使用它的一个内部类AlterDialog.Builder创 建。使用Builder对象,能够设置AlterDialog的各类属性,最后经过Builder.create()就能够获得AlterDialog对 象,若是只是还须要显示这个AlterDialog,通常能够直接使用Builder.show()方法,它会返回一个AlterDialog对象,而且 显示它。布局

  若是仅仅是须要提示一段信息给用户,那么就能够直接使用AlterDialog的一些属性设置提示信息,涉及到的方法有:ui

  • AlterDialog create():根据设置的属性,建立一个AlterDialog。
  • AlterDialog show():根据设置的属性,建立一个AlterDialog,而且显示在屏幕上。
  • AlterDialog.Builder setTitle():设置标题。
  • AlterDialog.Builder setIcon():设置标题的图标。
  • AlterDialog.Builder setMessage():设置标题的内容。
  • AlterDialog.Builder setCancelable():设置是否模态,通常设置为false,表示模态,要求用户必须采起行动才能继续进行剩下的操做。

  Tips:AlterDialog.Builder的不少设置属性的方法,返回的均是这个AlterDialog.Builder对象,因此可使用链式方式编写代码,这样更方便。this

  当一个对话框调用了show()方法后,展现到屏幕上,若是须要消除它,可使用DialogInterface接口声明的两个方 法,cancel()和dismiss()使对话框取或者消除,这两个方法的做用是同样的,不过推荐使用dismiss()。Dialog和 AlterDialog都实现了DialogInterface接口,因此只要是对话框,都可以使用这两个方法来消除对话框。

  下面经过一个简单的Demo,先看看AlterDialog是如何提示信息的:

  示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
btnGeneral.setOnClickListener( new  View.OnClickListener() {
  
              @Override
              public  void  onClick(View v) {
                  // TODO Auto-generated method stub
                  AlertDialog.Builder builder = new  AlertDialog.Builder(
                          MainActivity. this );
                 builder.setTitle( "提示" );
                  builder.setMessage( "这是一个普通的对话框!" );
                  builder.setIcon(R.drawable.ic_launcher);
                  builder.setCancelable( false );
                 builder.setPositiveButton( "知道了!" , new  OnClickListener() {
                      @Override
                      public  void  onClick(DialogInterface dialog, int  which) {
                          dialog.cancel();
                      }
                 });
                 builder.create().show();
              }
          });

 

展现效果:

 

AlterDialog的按钮

  AlterDialog内置了三个按钮,能够直接使用setXxxButton()方法进行设置,对于通常的对话框,使用三个按钮基本上也够用了,下面是这三个方法的签名:

  • AlterDialog.Builder setPositiveButton(CharSquence text , DialogInterFace.OnClickListener):一个积极的按钮,通常用于“OK”或者“继续”等操做。
  • AlterDialog.Builder setNegativeButton(CharSquence text , DialogInterFace.OnClickListener):一个负面的按钮,通常用于“取消”操做。
  • AlterDialog.Builder setNeutralButton(CharSquence text , DialogInterFace.OnClickListener):一个比较中性的按钮,通常用于“忽略”、“之后提醒我”等操做。

  上面介绍的DialogInterface接口,还提供了一系列的事件响应,这三个按钮均须要传递一个 DialogInterFace.OnClickListener接口对象,实现其点击事件的触发,在这个接口中须要实现一个 onClick(DialogInterface dialog,int which),dialog为当前触发事件的对话框对象接口,能够直接强制转换为AlterDialog进行操做;which为点击按钮的标识符,是一个 整形的数据,对于这三个按钮而言,每一个按钮使用不一样的int类型数据进行标识:Positive(-1)、Negative(-2)、 Neutral(-3)。

  而除了专门为按钮点击实现的DialogInterFace.OnClickListener事件外,DialogInterface还提供了 一些其余的事件,供Dialog对象响应,这些事件只是对Dialog声明周期各个状态的响应,一看就明白了,就再也不详细讲解了,下面是这几个事件的说 明:

  • interface DialogInterface.OnCancelListener:当对话框调用cancel()方法的时候触发。
  • interface DialogInterface.OnDismissListener:当对话框调用dismiss()方法的时候触发。
  • interface DialogInterface.OnShowListener:当对话框调用show()方法的时候触发。
  • interface DialogInterface.OnMultiChoiceListener:当对话框使用多选列表,而且选中的时候触发。

  示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
btnButtons.setOnClickListener( new  View.OnClickListener() {
 
              @Override
             public  void  onClick(View v) {
                  // TODO Auto-generated method stub
                  AlertDialog.Builder builder = new  AlertDialog.Builder(
                         MainActivity. this );
                  builder.setTitle( "提示" );
                  builder.setMessage( "这是一个多按钮普通的对话框!" );
                 builder.setIcon(R.drawable.ic_launcher);
                 builder.setPositiveButton( "肯定" , new  OnClickListener() {
  
                      @Override
                      public  void  onClick(DialogInterface dialog, int  which) {                       
                          Toast.makeText(MainActivity. this , "肯定被点击" ,
                                 Toast.LENGTH_SHORT).show();
                          dialog.dismiss();
                      }
                  });
                  builder.setNegativeButton( "否认" , new  OnClickListener() {
  
                      @Override
                     public  void  onClick(DialogInterface dialog, int  which) {
                          // TODO Auto-generated method stub
                          Toast.makeText(MainActivity. this , "否认被点击" ,
                                 Toast.LENGTH_SHORT).show();
                         dialog.dismiss();
                    }
                  });
                  builder.setNeutralButton( "忽略" , new  OnClickListener() {
 
                      @Override
                      public  void  onClick(DialogInterface dialog, int  which) {
                          // TODO Auto-generated method stub
                          Toast.makeText(MainActivity. this , "忽略被点击" ,
                                 Toast.LENGTH_SHORT).show();
                          dialog.cancel();
                      }
                  });
                  builder.show();
              }
          });

 

  展现效果:

 

AlterDialog的列表形式

  AlterDialog除了展现一些提示信息,还能够展现一种列表的形式,须要使用到 Builder.setItems(CharSequence[] items,DialogInterface.OnClickListener listener)方法进行设置,它须要传递一个CharSequenece类型的数组,以绑定列表的数据,它一样须要传递一个 DialogInterface.OnClickListener接口,以响应列表项的点击,而这个接口中onClick方法的which参数,为当前点 击触发项的items中的下标。

  示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
btnListView.setOnClickListener( new  View.OnClickListener() {
 
     @Override
     public  void  onClick(View v) {
         // TODO Auto-generated method stub
        AlertDialog.Builder builder = new  AlertDialog.Builder(
                MainActivity. this );
         builder.setTitle( "请选择城市" );
         //items使用全局的finalCharSequenece数组声明
         builder.setItems(items, new  OnClickListener() {
             @Override
             public  void  onClick(DialogInterface dialog, int  which) {
                 // TODO Auto-generated method stub
                 String select_item = items[which].toString();
                 Toast.makeText(MainActivity. this ,
                         "选择了---》"  + select_item, Toast.LENGTH_SHORT)
                         .show();
             }
         });
         builder.show();
     }
});
  效果展现: 

 

 AlterDialog的单选列表

  AlterDialog还可使用一种单选的列表样式,使用 Builder.setSingleChoiceItems(CharSequenece[] items,int checkedItem,DialogInterface.OnClickListener listener),这个方法具备多项重载,主要是为了应对不一样的数据源,items为列表项数组,checkedItem为初始选项,listener 为点击响应事件。有时候并不必定须要选中以后就关闭对话框,能够设置两个按钮,用于肯定选择。

  示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
btnListViewSingle.setOnClickListener( new  View.OnClickListener() {
             @Override
             public  void  onClick(View v) {
                 // TODO Auto-generated method stub
                 AlertDialog.Builder builder = new  AlertDialog.Builder(
                         MainActivity. this );
                 builder.setTitle( "请选择一下城市" );
                 builder.setSingleChoiceItems(items, 1 , new  OnClickListener() {
 
                     @Override
                     public  void  onClick(DialogInterface dialog, int  which) {
                         // TODO Auto-generated method stub
                        String select_item = items[which].toString();
                         Toast.makeText(MainActivity. this ,
                                 "选择了--->>"  + select_item, Toast.LENGTH_SHORT)
                                 .show();
                     }
                 });
                 builder.setPositiveButton( "肯定" , new  OnClickListener() {
                     @Override
                     public  void  onClick(DialogInterface dialog, int  which) {
                         dialog.dismiss();
                     }
                });
                 builder.show();
             }
         });

 

  效果展现:

 

AlterDialog多选列表

  AlterDialog除了单选列表,还有多选的列表。可使用 Builder.setMultiChoiceItems(CharSequence[] items,boolean[] checkedItems,DialogInterface.OnMultiChoiceClickListener listener),这个方法也一样具备多样重载,对于这个方法,items以一个数组为数据源;checkedItems是默认的选项,由于是多选列 表,因此若是设置须要所有设置,若是没有默认选中,则传Null;listener为多选项点击触发事件。

  示例: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
btnListViewMulti.setOnClickListener( new  View.OnClickListener() {
  
             @Override
              public  void  onClick(View v) {
                 // TODO Auto-generated method stub
                AlertDialog.Builder builder = new  AlertDialog.Builder(
                         MainActivity. this );
                builder.setTitle( "请选择城市" );
                  builder.setMultiChoiceItems(items, new  boolean [] { true , false ,
                          true  }, new  OnMultiChoiceClickListener() {
                     @Override
                     public  void  onClick(DialogInterface dialog, int  which,
                             boolean  isChecked) {
                         // TODO Auto-generated method stub
                         String select_item = items[which].toString();
                          Toast.makeText(MainActivity. this ,
                                  "选择了--->>"  + select_item, Toast.LENGTH_SHORT)
                                  .show();
                      }
                  });
                  builder.setPositiveButton( "肯定" , new  OnClickListener() {
                      @Override
                     public  void  onClick(DialogInterface dialog, int  which) {
                         dialog.dismiss();
                     }
                  });
                 builder.show();
             }
          });

 

  效果展现:

 

 

AlertDialog自定义样式

  有些时候,Android自带的一些样式设置已经没法知足需求了,那么可使用自定义样式,自定义个XML布局文件,用这个文件的内容做为 AlertDialog的样式展现在屏幕上,这样就能够灵活定制对话框了。对于定制的XML文件,可使用 LayoutInflater.from(Context).inflate(int,ViewGroup)的方式对其进行动态加载,而后使用 Builder.setView(View)把加载的视图与Builder对象进行关联,最后正常show()便可。

  布局代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
     xmlns:tools= "http://schemas.android.com/tools"
      android:layout_width= "match_parent"
      android:layout_height= "match_parent"
      android:orientation= "vertical"
     android:paddingBottom= "@dimen/activity_vertical_margin"
      android:paddingLeft= "@dimen/activity_horizontal_margin"
      android:paddingRight= "@dimen/activity_horizontal_margin"
      android:paddingTop= "@dimen/activity_vertical_margin"
      tools:context= ".MainActivity"  >
 
     <Button
          android:id= "@+id/btnGeneral"
         android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "普通对话框"  />
  
      <Button
          android:id= "@+id/btnButtons"
         android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "多按钮的普通对话框"  />
  
     <Button
          android:id= "@+id/btnListView"
          android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "列表选择对话框"  />
  
      <Button
         android:id= "@+id/btnListViewSingle"
          android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "单选列表选择对话框"  />
  
      <Button
          android:id= "@+id/btnListViewMulti"
          android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "多选列表选择对话框"  />
 
      <Button
          android:id= "@+id/btnProgressDialog"
          android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "滚动等待对话框"  />
  
      <Button
          android:id= "@+id/btnProgressDialogH"
          android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "进度条对话框"  />
      <Button
         android:id= "@+id/btnCustomDialog"
          android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "自定义对话框"  />
  </LinearLayout>

 

  实现代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
btnCustomDialog.setOnClickListener( new  View.OnClickListener() {
              
              @Override
             public  void  onClick(View v) {
                 AlertDialog.Builder builder= new  AlertDialog.Builder(MainActivity. this );
                  View view=LayoutInflater.from(MainActivity. this ).inflate(R.layout.dialog_signin, null );
                  Button btn=(Button)view.findViewById(R.id.btnCustom);
                  btn.setOnClickListener( new  View.OnClickListener() {
                      
                      @Override
                      public  void  onClick(View v) {
                          // TODO Auto-generated method stub
                          alertDialog.dismiss();
                         Toast.makeText(MainActivity. this , "表单填写完成" ,
                                  Toast.LENGTH_SHORT).show();
                      }
                  });
                  builder.setView(view);
                  alertDialog=builder.show();               
              }
          });

 

  效果展现:

 

ProgressDialog

  有些时候,只是须要提示用户等待,好比在执行耗时操做等的时候,可使用进度对话框来显示一个进度信息,提示用户等待,这个时候可使用 ProgressDialog。ProgressDialog的使用方式大部分能够参见ProgressBar,其实就是一个封装了 ProgressBar的对话框。

  ProgressDialog有 两种显示方式,一种是以一个滚动的环状图标,能够显示一个标题和一段文本内容的等待对话框;另一种是带刻度的进度条,和常规的进度条用法一致。两种样式 经过ProgressDialog.setProgressStyle(int style)设置,能够经过ProgressDialog的两个常量进行设置:STYLE_HORIZONTAL:刻度滚 动;STYLE_SPINNER:图标滚动,默认选项。

  对于图标滚动,可使用两种方式实现,一种是常规的调用构造函数,再设置对应的属性;另一种是直接使用ProgressDialog的静态方法show(),直接返回一个ProgressDialog对象,而且调用show()方法。

  示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
btnProgressDialog.setOnClickListener( new  View.OnClickListener() {
  
              @Override
              public  void  onClick(View v) {
                  // 第一种方法,使用ProgressDialog构造函数
                  progressDialog = new  ProgressDialog(MainActivity. this );
                  progressDialog.setIcon(R.drawable.ic_launcher);
                  progressDialog.setTitle( "等待" );
                  progressDialog.setMessage( "正在加载...." );
                 progressDialog.show();
                  //第二种方法,使用静态的show方法
                  //progressDialog=ProgressDialog.show(MainActivity.this, "等待", "正在加载....", false, false);
                  new  Thread( new  Runnable() {
  
                      @Override
                      public  void  run() {
                         try  {
                              Thread.sleep( 5000 );           
                          } catch  (Exception e) {
                              e.printStackTrace();
                          }
                         finally {
                              progressDialog.dismiss();
                          }                       
                      }
                  }).start();
              }
          });

 

  效果展现:

  对于有刻度的ProgressDialog,除了从AlertDialog中继承来的属性,有一些必要的属性须要设置,如下方法都有对于的getter方法:

  • setMax(int max):最大刻度。
  • setProgress(int value):第一进度。
  • setSecondaryProgress(int value):第二进度。

  示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
btnProgressDialog.setOnClickListener( new  View.OnClickListener() {
  
              @Override
              public  void  onClick(View v) {
                  // 第一种方法,使用ProgressDialog构造函数
                  progressDialog = new  ProgressDialog(MainActivity. this );
                  progressDialog.setIcon(R.drawable.ic_launcher);
                  progressDialog.setTitle( "等待" );
                  progressDialog.setMessage( "正在加载...." );
                  progressDialog.show();
                  //第二种方法,使用静态的show方法
                  //progressDialog=ProgressDialog.show(MainActivity.this, "等待", "正在加载....", false, false);
                  new  Thread( new  Runnable() {
  
                      @Override
                      public  void  run() {
                         try  {
                              Thread.sleep( 5000 );           
                          } catch  (Exception e) {
                              e.printStackTrace();
                          }
                          finally {
                              progressDialog.dismiss();
                          }                       
                      }
                  }).start();
              }
          });

 

  效果展现:

Android--Dialog详细讲解
 
 
 

前言

  对话框对于应用也是必不可少的一个组件,在Android中也不例外,对话框对于一些提示重要信息,或者一些须要用户额外交互的一些内容颇有帮 助。本篇博客就讲解一下Android下对话框的使用,在本篇博客中,将了解到对话框的一些常规属性的设置,以及各式的对话框的使用,并都会提供小 Demo来展现全部的效果。

Dialog

  Dialog,对话框,一个对话框就是一个小窗口,并不会填满整个屏幕,一般是以模态显示,要求用户必须采起行动才能继续进行剩下的操做。

  Android提供了丰富的对话框支持,它提供了以下4中经常使用的对话框:

  • AlertDialog:警告对话框,使用最普遍功能最丰富的一个对话框。
  • ProgressDialog:进度条对话框,只是对进度条进行了简单的封装。
  • DatePickerDialog:日期对话框。
  • TimePickerDialog:时间对话框。

  全部的对话框,都是直接或间接继承自Dialog类,而AlterDialog直接继承自Dialog,其余的几个类均继承自AlterDialog。

 

AlertDialog

  AlertDialog继承自Dialog类,对于Android内置的AlterDialog,它能够包含一个标题、一个内容消息或者一个选择列表、最多三个按钮。而建立AlterDialog推荐使用它的一个内部类AlterDialog.Builder创 建。使用Builder对象,能够设置AlterDialog的各类属性,最后经过Builder.create()就能够获得AlterDialog对 象,若是只是还须要显示这个AlterDialog,通常能够直接使用Builder.show()方法,它会返回一个AlterDialog对象,而且 显示它。

  若是仅仅是须要提示一段信息给用户,那么就能够直接使用AlterDialog的一些属性设置提示信息,涉及到的方法有:

  • AlterDialog create():根据设置的属性,建立一个AlterDialog。
  • AlterDialog show():根据设置的属性,建立一个AlterDialog,而且显示在屏幕上。
  • AlterDialog.Builder setTitle():设置标题。
  • AlterDialog.Builder setIcon():设置标题的图标。
  • AlterDialog.Builder setMessage():设置标题的内容。
  • AlterDialog.Builder setCancelable():设置是否模态,通常设置为false,表示模态,要求用户必须采起行动才能继续进行剩下的操做。

  Tips:AlterDialog.Builder的不少设置属性的方法,返回的均是这个AlterDialog.Builder对象,因此可使用链式方式编写代码,这样更方便。

  当一个对话框调用了show()方法后,展现到屏幕上,若是须要消除它,可使用DialogInterface接口声明的两个方 法,cancel()和dismiss()使对话框取或者消除,这两个方法的做用是同样的,不过推荐使用dismiss()。Dialog和 AlterDialog都实现了DialogInterface接口,因此只要是对话框,都可以使用这两个方法来消除对话框。

  下面经过一个简单的Demo,先看看AlterDialog是如何提示信息的:

  示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
btnGeneral.setOnClickListener( new  View.OnClickListener() {
  
              @Override
              public  void  onClick(View v) {
                  // TODO Auto-generated method stub
                  AlertDialog.Builder builder = new  AlertDialog.Builder(
                          MainActivity. this );
                 builder.setTitle( "提示" );
                  builder.setMessage( "这是一个普通的对话框!" );
                  builder.setIcon(R.drawable.ic_launcher);
                  builder.setCancelable( false );
                 builder.setPositiveButton( "知道了!" , new  OnClickListener() {
                      @Override
                      public  void  onClick(DialogInterface dialog, int  which) {
                          dialog.cancel();
                      }
                 });
                 builder.create().show();
              }
          });

 

展现效果:

 

AlterDialog的按钮

  AlterDialog内置了三个按钮,能够直接使用setXxxButton()方法进行设置,对于通常的对话框,使用三个按钮基本上也够用了,下面是这三个方法的签名:

  • AlterDialog.Builder setPositiveButton(CharSquence text , DialogInterFace.OnClickListener):一个积极的按钮,通常用于“OK”或者“继续”等操做。
  • AlterDialog.Builder setNegativeButton(CharSquence text , DialogInterFace.OnClickListener):一个负面的按钮,通常用于“取消”操做。
  • AlterDialog.Builder setNeutralButton(CharSquence text , DialogInterFace.OnClickListener):一个比较中性的按钮,通常用于“忽略”、“之后提醒我”等操做。

  上面介绍的DialogInterface接口,还提供了一系列的事件响应,这三个按钮均须要传递一个 DialogInterFace.OnClickListener接口对象,实现其点击事件的触发,在这个接口中须要实现一个 onClick(DialogInterface dialog,int which),dialog为当前触发事件的对话框对象接口,能够直接强制转换为AlterDialog进行操做;which为点击按钮的标识符,是一个 整形的数据,对于这三个按钮而言,每一个按钮使用不一样的int类型数据进行标识:Positive(-1)、Negative(-2)、 Neutral(-3)。

  而除了专门为按钮点击实现的DialogInterFace.OnClickListener事件外,DialogInterface还提供了 一些其余的事件,供Dialog对象响应,这些事件只是对Dialog声明周期各个状态的响应,一看就明白了,就再也不详细讲解了,下面是这几个事件的说 明:

  • interface DialogInterface.OnCancelListener:当对话框调用cancel()方法的时候触发。
  • interface DialogInterface.OnDismissListener:当对话框调用dismiss()方法的时候触发。
  • interface DialogInterface.OnShowListener:当对话框调用show()方法的时候触发。
  • interface DialogInterface.OnMultiChoiceListener:当对话框使用多选列表,而且选中的时候触发。

  示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
btnButtons.setOnClickListener( new  View.OnClickListener() {
 
              @Override
             public  void  onClick(View v) {
                  // TODO Auto-generated method stub
                  AlertDialog.Builder builder = new  AlertDialog.Builder(
                         MainActivity. this );
                  builder.setTitle( "提示" );
                  builder.setMessage( "这是一个多按钮普通的对话框!" );
                 builder.setIcon(R.drawable.ic_launcher);
                 builder.setPositiveButton( "肯定" , new  OnClickListener() {
  
                      @Override
                      public  void  onClick(DialogInterface dialog, int  which) {                       
                          Toast.makeText(MainActivity. this , "肯定被点击" ,
                                 Toast.LENGTH_SHORT).show();
                          dialog.dismiss();
                      }
                  });
                  builder.setNegativeButton( "否认" , new  OnClickListener() {
  
                      @Override
                     public  void  onClick(DialogInterface dialog, int  which) {
                          // TODO Auto-generated method stub
                          Toast.makeText(MainActivity. this , "否认被点击" ,
                                 Toast.LENGTH_SHORT).show();
                         dialog.dismiss();
                    }
                  });
                  builder.setNeutralButton( "忽略" , new  OnClickListener() {
 
                      @Override
                      public  void  onClick(DialogInterface dialog, int  which) {
                          // TODO Auto-generated method stub
                          Toast.makeText(MainActivity. this , "忽略被点击" ,
                                 Toast.LENGTH_SHORT).show();
                          dialog.cancel();
                      }
                  });
                  builder.show();
              }
          });

 

  展现效果:

 

AlterDialog的列表形式

  AlterDialog除了展现一些提示信息,还能够展现一种列表的形式,须要使用到 Builder.setItems(CharSequence[] items,DialogInterface.OnClickListener listener)方法进行设置,它须要传递一个CharSequenece类型的数组,以绑定列表的数据,它一样须要传递一个 DialogInterface.OnClickListener接口,以响应列表项的点击,而这个接口中onClick方法的which参数,为当前点 击触发项的items中的下标。

  示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
btnListView.setOnClickListener( new  View.OnClickListener() {
 
     @Override
     public  void  onClick(View v) {
         // TODO Auto-generated method stub
        AlertDialog.Builder builder = new  AlertDialog.Builder(
                MainActivity. this );
         builder.setTitle( "请选择城市" );
         //items使用全局的finalCharSequenece数组声明
         builder.setItems(items, new  OnClickListener() {
             @Override
             public  void  onClick(DialogInterface dialog, int  which) {
                 // TODO Auto-generated method stub
                 String select_item = items[which].toString();
                 Toast.makeText(MainActivity. this ,
                         "选择了---》"  + select_item, Toast.LENGTH_SHORT)
                         .show();
             }
         });
         builder.show();
     }
});
  效果展现: 

 

 AlterDialog的单选列表

  AlterDialog还可使用一种单选的列表样式,使用 Builder.setSingleChoiceItems(CharSequenece[] items,int checkedItem,DialogInterface.OnClickListener listener),这个方法具备多项重载,主要是为了应对不一样的数据源,items为列表项数组,checkedItem为初始选项,listener 为点击响应事件。有时候并不必定须要选中以后就关闭对话框,能够设置两个按钮,用于肯定选择。

  示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
btnListViewSingle.setOnClickListener( new  View.OnClickListener() {
             @Override
             public  void  onClick(View v) {
                 // TODO Auto-generated method stub
                 AlertDialog.Builder builder = new  AlertDialog.Builder(
                         MainActivity. this );
                 builder.setTitle( "请选择一下城市" );
                 builder.setSingleChoiceItems(items, 1 , new  OnClickListener() {
 
                     @Override
                     public  void  onClick(DialogInterface dialog, int  which) {
                         // TODO Auto-generated method stub
                        String select_item = items[which].toString();
                         Toast.makeText(MainActivity. this ,
                                 "选择了--->>"  + select_item, Toast.LENGTH_SHORT)
                                 .show();
                     }
                 });
                 builder.setPositiveButton( "肯定" , new  OnClickListener() {
                     @Override
                     public  void  onClick(DialogInterface dialog, int  which) {
                         dialog.dismiss();
                     }
                });
                 builder.show();
             }
         });

 

  效果展现:

 

AlterDialog多选列表

  AlterDialog除了单选列表,还有多选的列表。可使用 Builder.setMultiChoiceItems(CharSequence[] items,boolean[] checkedItems,DialogInterface.OnMultiChoiceClickListener listener),这个方法也一样具备多样重载,对于这个方法,items以一个数组为数据源;checkedItems是默认的选项,由于是多选列 表,因此若是设置须要所有设置,若是没有默认选中,则传Null;listener为多选项点击触发事件。

  示例: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
btnListViewMulti.setOnClickListener( new  View.OnClickListener() {
  
             @Override
              public  void  onClick(View v) {
                 // TODO Auto-generated method stub
                AlertDialog.Builder builder = new  AlertDialog.Builder(
                         MainActivity. this );
                builder.setTitle( "请选择城市" );
                  builder.setMultiChoiceItems(items, new  boolean [] { true , false ,
                          true  }, new  OnMultiChoiceClickListener() {
                     @Override
                     public  void  onClick(DialogInterface dialog, int  which,
                             boolean  isChecked) {
                         // TODO Auto-generated method stub
                         String select_item = items[which].toString();
                          Toast.makeText(MainActivity. this ,
                                  "选择了--->>"  + select_item, Toast.LENGTH_SHORT)
                                  .show();
                      }
                  });
                  builder.setPositiveButton( "肯定" , new  OnClickListener() {
                      @Override
                     public  void  onClick(DialogInterface dialog, int  which) {
                         dialog.dismiss();
                     }
                  });
                 builder.show();
             }
          });

 

  效果展现:

 

 

AlertDialog自定义样式

  有些时候,Android自带的一些样式设置已经没法知足需求了,那么可使用自定义样式,自定义个XML布局文件,用这个文件的内容做为 AlertDialog的样式展现在屏幕上,这样就能够灵活定制对话框了。对于定制的XML文件,可使用 LayoutInflater.from(Context).inflate(int,ViewGroup)的方式对其进行动态加载,而后使用 Builder.setView(View)把加载的视图与Builder对象进行关联,最后正常show()便可。

  布局代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
     xmlns:tools= "http://schemas.android.com/tools"
      android:layout_width= "match_parent"
      android:layout_height= "match_parent"
      android:orientation= "vertical"
     android:paddingBottom= "@dimen/activity_vertical_margin"
      android:paddingLeft= "@dimen/activity_horizontal_margin"
      android:paddingRight= "@dimen/activity_horizontal_margin"
      android:paddingTop= "@dimen/activity_vertical_margin"
      tools:context= ".MainActivity"  >
 
     <Button
          android:id= "@+id/btnGeneral"
         android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "普通对话框"  />
  
      <Button
          android:id= "@+id/btnButtons"
         android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "多按钮的普通对话框"  />
  
     <Button
          android:id= "@+id/btnListView"
          android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "列表选择对话框"  />
  
      <Button
         android:id= "@+id/btnListViewSingle"
          android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "单选列表选择对话框"  />
  
      <Button
          android:id= "@+id/btnListViewMulti"
          android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "多选列表选择对话框"  />
 
      <Button
          android:id= "@+id/btnProgressDialog"
          android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "滚动等待对话框"  />
  
      <Button
          android:id= "@+id/btnProgressDialogH"
          android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "进度条对话框"  />
      <Button
         android:id= "@+id/btnCustomDialog"
          android:layout_width= "wrap_content"
          android:layout_height= "wrap_content"
          android:text= "自定义对话框"  />
  </LinearLayout>

 

  实现代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
btnCustomDialog.setOnClickListener( new  View.OnClickListener() {
              
              @Override
             public  void  onClick(View v) {
                 AlertDialog.Builder builder= new  AlertDialog.Builder(MainActivity. this );
                  View view=LayoutInflater.from(MainActivity. this ).inflate(R.layout.dialog_signin, null );
                  Button btn=(Button)view.findViewById(R.id.btnCustom);
                  btn.setOnClickListener( new  View.OnClickListener() {
                      
                      @Override
                      public  void  onClick(View v) {
                          // TODO Auto-generated method stub
                          alertDialog.dismiss();
                         Toast.makeText(MainActivity. this , "表单填写完成" ,
                                  Toast.LENGTH_SHORT).show();
                      }
                  });
                  builder.setView(view);
                  alertDialog=builder.show();               
              }
          });

 

  效果展现:

 

ProgressDialog

  有些时候,只是须要提示用户等待,好比在执行耗时操做等的时候,可使用进度对话框来显示一个进度信息,提示用户等待,这个时候可使用 ProgressDialog。ProgressDialog的使用方式大部分能够参见ProgressBar,其实就是一个封装了 ProgressBar的对话框。

  ProgressDialog有 两种显示方式,一种是以一个滚动的环状图标,能够显示一个标题和一段文本内容的等待对话框;另一种是带刻度的进度条,和常规的进度条用法一致。两种样式 经过ProgressDialog.setProgressStyle(int style)设置,能够经过ProgressDialog的两个常量进行设置:STYLE_HORIZONTAL:刻度滚 动;STYLE_SPINNER:图标滚动,默认选项。

  对于图标滚动,可使用两种方式实现,一种是常规的调用构造函数,再设置对应的属性;另一种是直接使用ProgressDialog的静态方法show(),直接返回一个ProgressDialog对象,而且调用show()方法。

  示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
btnProgressDialog.setOnClickListener( new  View.OnClickListener() {
  
              @Override
              public  void  onClick(View v) {
                  // 第一种方法,使用ProgressDialog构造函数
                  progressDialog = new  ProgressDialog(MainActivity. this );
                  progressDialog.setIcon(R.drawable.ic_launcher);
                  progressDialog.setTitle( "等待" );
                  progressDialog.setMessage( "正在加载...." );
                 progressDialog.show();
                  //第二种方法,使用静态的show方法
                  //progressDialog=ProgressDialog.show(MainActivity.this, "等待", "正在加载....", false, false);
                  new  Thread( new  Runnable() {
  
                      @Override
                      public  void  run() {
                         try  {
                              Thread.sleep( 5000 );           
                          } catch  (Exception e) {
                              e.printStackTrace();
                          }
                         finally {
                              progressDialog.dismiss();
                          }                       
                      }
                  }).start();
              }
          });

 

  效果展现:

  对于有刻度的ProgressDialog,除了从AlertDialog中继承来的属性,有一些必要的属性须要设置,如下方法都有对于的getter方法:

  • setMax(int max):最大刻度。
  • setProgress(int value):第一进度。
  • setSecondaryProgress(int value):第二进度。

  示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
btnProgressDialog.setOnClickListener( new  View.OnClickListener() {
  
              @Override
              public  void  onClick(View v) {
                  // 第一种方法,使用ProgressDialog构造函数
                  progressDialog = new  ProgressDialog(MainActivity. this );
                  progressDialog.setIcon(R.drawable.ic_launcher);
                  progressDialog.setTitle( "等待" );
                  progressDialog.setMessage( "正在加载...." );
                  progressDialog.show();
                  //第二种方法,使用静态的show方法
                  //progressDialog=ProgressDialog.show(MainActivity.this, "等待", "正在加载....", false, false);
                  new  Thread( new  Runnable() {
  
                      @Override
                      public  void  run() {
                         try  {
                              Thread.sleep( 5000 );           
                          } catch  (Exception e) {
                              e.printStackTrace();
                          }
                          finally {
                              progressDialog.dismiss();
                          }                       
                      }
                  }).start();
              }
          });

 

  效果展现:

   源码下载

 总结

   源码下载

 总结

相关文章
相关标签/搜索