Android中Dialog对话框的调用及监听

简介:

Android中经常会需要在Android界面上弹出一些对话框提示用户,比如App的退出的时候都会有各种框来挽留你的心,支付宝的时候输入密码的密码框,非常常见及其实用的功能,类似于JS中的alter,C#中C/S中常用MessgeBox,总而言之就是一个功能弹,弹,弹,本文就简单的叙述一下Dialog的各种弹框使用及监听,顺便写了一个简单的自定义弹框,接下来请看正文:

一般对话框

先看下整个App页面:

看下一般对话框的结果:

 

具体代码的实现,其中定义了两个按钮,一个是确定(PositiveButton)按钮,一个是取消(NegativeButton)按钮:

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
builder =  new  AlertDialog.Builder( this );
         builder.setTitle( "亲,你真的要离开吗?" );
         // 相当于确定
         builder.setPositiveButton( "退出" ,
                 new  DialogInterface.OnClickListener() {
                     @Override
                     public  void  onClick(DialogInterface dialog,  int  which) {
                         // TODO Auto-generated method stub
                         Toast.makeText(MainActivity. this "是的,哥要走了" ,
                                 Toast.LENGTH_SHORT).show();
                     }
                 });
         // 相当于取消
         builder.setNegativeButton( "再看看" ,
                 new  DialogInterface.OnClickListener() {
 
                     @Override
                     public  void  onClick(DialogInterface dialog,  int  which) {
                         // TODO Auto-generated method stub
                         Toast.makeText(MainActivity. this "行,哥再看会" ,
                                 Toast.LENGTH_SHORT).show();
                     }
                 });
 
         builder.show();

 ICON对话框

上面只是用到了两个按钮,其实还有一个是中立按钮,另外发现每次都写一个监听事件感觉太麻烦了,可以单独写一个监听事件去判断哪个事件被触发了:

 

单独定义个DialogClickListener:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private  DialogInterface.OnClickListener dialogClickListener =  new  DialogInterface.OnClickListener() {
 
     @Override
     public  void  onClick(DialogInterface dialog,  int  which) {
         // TODO Auto-generated method stub
         switch  (which) {
         case  DialogInterface.BUTTON_POSITIVE:
             Toast.makeText(MainActivity. this "强烈支持"  + which,
                     Toast.LENGTH_SHORT).show();
             break ;
         case  DialogInterface.BUTTON_NEUTRAL:
             Toast.makeText(MainActivity. this "跟我无关,我是中立的"  + which,
                     Toast.LENGTH_SHORT).show();
             break ;
         case  DialogInterface.BUTTON_NEGATIVE:
             Toast.makeText(MainActivity. this "强烈反对"  + which,
                     Toast.LENGTH_SHORT).show();
             break ;
         default :
             break ;
         }
     }
};

  按钮事件的调用:

1
2
3
4
5
6
7
8
9
builder =  new  AlertDialog.Builder( this );
         builder.setTitle( "XX视频" );
         builder.setIcon(android.R.drawable.btn_star);
         builder.setMessage( "如何看待香港占中事件?" );
         builder.setPositiveButton( "支持" , dialogClickListener);
         builder.setNegativeButton( "反对" , dialogClickListener);
         // 中立
         builder.setNeutralButton( "中立" , dialogClickListener);
         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
builder =  new  AlertDialog.Builder( this );
     builder.setTitle( "NBA幻觉" );
     builder.setIcon(android.R.drawable.btn_star);
     final  String[] nameArrStrings =  new  String[] {  "马刺很老" "小牛很弱" ,
             "火箭很强"  };
     builder.setItems(nameArrStrings,  new  OnClickListener() {
 
         @Override
         public  void  onClick(DialogInterface dialog,  int  which) {
             // TODO Auto-generated method stub
             Toast.makeText(MainActivity. this , nameArrStrings[which],
                     Toast.LENGTH_SHORT).show();
         }
     });
     builder.setPositiveButton( "确定" new  OnClickListener() {
 
         @Override
         public  void  onClick(DialogInterface dialog,  int  which) {
             // TODO Auto-generated method stub
 
         }
     });
     builder.setNegativeButton( "取消" new  OnClickListener() {
 
         @Override
         public  void  onClick(DialogInterface dialog,  int  which) {
             // TODO Auto-generated method stub
 
         }
     });
     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
builder =  new  AlertDialog.Builder( this );
         builder.setTitle( "NBA球队" );
         builder.setIcon(android.R.drawable.btn_radio);
         final  String[] ballArr =  new  String[] {  "骑士" "热火" "凯尔特人"  };
         builder.setSingleChoiceItems(ballArr,  1 new  OnClickListener() {
 
             @Override
             public  void  onClick(DialogInterface dialog,  int  which) {
                 // TODO Auto-generated method stub
                 Toast.makeText(MainActivity. this , ballArr[which],
                         Toast.LENGTH_SHORT).show();
             }
         });
         builder.setPositiveButton( "确定" new  OnClickListener() {
 
             @Override
             public  void  onClick(DialogInterface dialog,  int  which) {
                 // TODO Auto-generated method stub
 
             }
         });
         builder.setNegativeButton( "取消" new  OnClickListener() {
 
             @Override
             public  void  onClick(DialogInterface dialog,  int  which) {
                 // TODO Auto-generated method stub
 
             }
         });
         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
builder =  new  AlertDialog.Builder( this );
         builder.setTitle( "NBA球星" );
         builder.setIcon(android.R.drawable.btn_radio);
         final  String[] ballstartArr =  new  String[] {  "邓肯" "诺维斯基" "莱昂纳德" ,
                 "科比"  };
         final  boolean [] multiCheckedArrStrings =  new  boolean [] {  true ,
                 false true false  };
         builder.setMultiChoiceItems(ballstartArr, multiCheckedArrStrings,
                 new  OnMultiChoiceClickListener() {
 
                     @Override
                     public  void  onClick(DialogInterface dialog,  int  which,
                             boolean  isChecked) {
                         // TODO Auto-generated method stub
                         StringBuffer buffer =  new  StringBuffer();
                         for  ( int  i =  0 ; i < multiCheckedArrStrings.length; i++) {
                             if  (multiCheckedArrStrings[i]) {
                                 buffer.append(ballstartArr[i] +  "," );
                             }
                         }
                         buffer.deleteCharAt(buffer.length() -  1 );
                         Toast.makeText(MainActivity. this , buffer,
                                 Toast.LENGTH_SHORT).show();
                     }
                 });
 
         builder.setPositiveButton( "确定" new  OnClickListener() {
 
             @Override
             public  void  onClick(DialogInterface dialog,  int  which) {
                 // TODO Auto-generated method stub
 
             }
         });
         builder.show();

  文本对话框

比如说支付宝,转账的时候你需要输入密码,弹出一个密码输入框,效果如图:

代码实现,,这个时候你需要给builder中的view赋值:

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
builder =  new  AlertDialog.Builder( this );
     builder.setTitle( "输入密码" );
     builder.setIcon(android.R.drawable.btn_star);
     final  EditText editText =  new  EditText(MainActivity. this );
     builder.setView(editText);
     builder.setPositiveButton( "确定" ,
             new  DialogInterface.OnClickListener() {
                 @Override
                 public  void  onClick(DialogInterface dialog,  int  which) {
                     // TODO Auto-generated method stub
                     Toast.makeText(MainActivity. this ,
                             "输入的密码是:"  + editText.getText(),
                             Toast.LENGTH_SHORT).show();
                 }
             });
     builder.setNegativeButton( "取消" ,
             new  DialogInterface.OnClickListener() {
 
                 @Override
                 public  void  onClick(DialogInterface dialog,  int  which) {
                     // TODO Auto-generated method stub
                     Toast.makeText(MainActivity. this "取消" ,
                             Toast.LENGTH_SHORT).show();
                 }
             });
 
     builder.show();

 

  自定义对话框

上面的那个EditText是创建的,其实可以自定义一个布局,然后通过填充进去,效果如下:

自定义一个dialog_text.xml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version= "1.0"  encoding= "utf-8" ?>
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
     android:layout_width= "match_parent"
     android:layout_height= "match_parent"
     android:orientation= "horizontal"  >
 
     <TextView
         android:layout_width= "wrap_content"
         android:layout_height= "wrap_content"
         android:text= "密码:"  />
 
     
     <EditText
         android:id= "@+id/edit_password"
         android:layout_width= "match_parent"
         android:layout_height= "wrap_content"
         />
</LinearLayout>

  代码实现:

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
builder =  new  AlertDialog.Builder( this );
     builder.setTitle( "输入密码" );
     builder.setIcon(android.R.drawable.btn_star);
     final  EditText editText =  new  EditText(MainActivity. this );
     builder.setView(editText);
     builder.setPositiveButton( "确定" ,
             new  DialogInterface.OnClickListener() {
                 @Override
                 public  void  onClick(DialogInterface dialog,  int  which) {
                     // TODO Auto-generated method stub
                     Toast.makeText(MainActivity. this ,
                             "输入的密码是:"  + editText.getText(),
                             Toast.LENGTH_SHORT).show();
                 }
             });
     builder.setNegativeButton( "取消" ,
             new  DialogInterface.OnClickListener() {
 
                 @Override
                 public  void  onClick(DialogInterface dialog,  int  which) {
                     // TODO Auto-generated method stub
                     Toast.makeText(MainActivity. this "取消" ,
                             Toast.LENGTH_SHORT).show();
                 }
             });
 
     builder.show();

------------2015.11.15更新---忘记写了,还有一种是进度条对话框,简单的进度对话框和带进度的对话框-----

代码如下:

 

1
2
3
4
ProgressDialog  progressDialog= new   ProgressDialog( this );
         progressDialog.setTitle( "XX助手" );
         progressDialog.setMessage( "XX正在更新。。。" );
         progressDialog.show();

 

显示进度的对话框:

 

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
final  ProgressDialog  precentDialog= new   ProgressDialog( this );
     precentDialog.setTitle( "XX下载" );
     precentDialog.setMessage( "XX正在更新。。。" );
     precentDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);                                  
     precentDialog.setMax( 100 );
     precentDialog.show();
     new  Thread(){
         public  void  run() {
             for  ( int  i =  0 ; i <  100 ; i++) {
                 try  {
                     Thread.sleep( 50 );
                 catch  (InterruptedException e) {
                     e.printStackTrace();
                 }
                 precentDialog.setProgress(i);
             }
             precentDialog.dismiss();
         };
     }.start();  

 本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4084056.html,如需转载请自行联系原作者

相关文章
|
7月前
|
Java Maven Android开发
Android弹出dialog提示框演示
Android弹出dialog提示框演示
61 1
|
7月前
|
Android开发
Android Studio APP开发入门之对话框Dialog的讲解及使用(附源码 包括提醒对话框,日期对话框,时间对话框)
Android Studio APP开发入门之对话框Dialog的讲解及使用(附源码 包括提醒对话框,日期对话框,时间对话框)
182 0
|
7月前
|
XML 监控 Android开发
Android Studio App开发入门之文本输入EditText的讲解及使用(附源码 包括编辑框、焦点变更监听器、文本变化监听器 )
Android Studio App开发入门之文本输入EditText的讲解及使用(附源码 包括编辑框、焦点变更监听器、文本变化监听器 )
355 0
|
5月前
|
XML Android开发 数据格式
Android 中如何设置activity的启动动画,让它像dialog一样从底部往上出来
在 Android 中实现 Activity 的对话框式过渡动画:从底部滑入与从顶部滑出。需定义两个 XML 动画文件 `activity_slide_in.xml` 和 `activity_slide_out.xml`,分别控制 Activity 的进入与退出动画。使用 `overridePendingTransition` 方法在启动 (`startActivity`) 或结束 (`finish`) Activity 时应用这些动画。为了使前 Activity 保持静止,可定义 `no_animation.xml` 并在启动新 Activity 时仅设置新 Activity 的进入动画。
153 12
|
5月前
|
监控 Android开发 开发者
Android经典面试题之实战经验分享:如何简单实现App的前后台监听判断
本文介绍在Android中判断应用前后台状态的两种方法:`ActivityLifecycleCallbacks`和`ProcessLifecycleOwner`。前者提供精细控制,适用于需针对每个Activity处理的场景;后者简化前后台检测,适用于多数应用。两者各有优劣:`ActivityLifecycleCallbacks`更精确但复杂度高;`ProcessLifecycleOwner`更简便但可能在极端场景下略有差异。根据应用需求选择合适方法。
47 2
|
5月前
|
API Android开发
Android 监听Notification 被清除实例代码
Android 监听Notification 被清除实例代码
|
6月前
|
Android开发
Android中如何动态的调整Dialog的背景深暗
在Android开发中,Dialog和DialogFragment可通过设置`Window`的`backgroundDimAmount`来控制背景变暗,突出对话框。在DialogFragment的`onCreateDialog`或`onViewCreated`中,获取`Dialog`的`Window`,设置`LayoutParams.dimAmount`(例如0.5f)并添加`FLAG_DIM_BEHIND`标志。要动态调整,可保存`LayoutParams`并在需要时更新。对于Dialog,创建时直接设置同样属性。还可以通过定义主题样式设置背景模糊程度。
171 7
|
6月前
|
Android开发
技术经验分享:Android前后台切换的监听
技术经验分享:Android前后台切换的监听
124 2
|
6月前
|
XML Android开发 数据格式
37. 【Android教程】基于监听的事件处理机制
37. 【Android教程】基于监听的事件处理机制
92 2
|
6月前
|
API Android开发
32. 【Android教程】对话框:AlertDialog
32. 【Android教程】对话框:AlertDialog
110 2