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

转自:http://www.cnblogs.com/xiaofeixiang/p/4084056.html

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();  

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android ,要显示一个多选对话框,可以使用 AlertDialog.BuildersetMultiChoiceItems() 方法。该方法的参数包括: - CharSequence[] items:选项列表,即对话框显示的选项内容; - boolean[] checkedItems:选项的初始选择状态,如果不需要设置初始状态,可以传入 null; - DialogInterface.OnMultiChoiceClickListener listener:选项的点击事件监听器,当用户点击选项时,会触发该监听的 onClick() 方法。 例如,以下代码演示了如何创建一个带有多选列表的对话框: ```java final String[] items = {"选项1", "选项2", "选项3", "选项4", "选项5"}; final boolean[] checkedItems = {false, false, false, false, false}; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("多选对话框"); builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { checkedItems[which] = isChecked; } }); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 处理选的选项 for (int i = 0; i < checkedItems.length; i++) { if (checkedItems[i]) { // 选项i被选了 } } } }); builder.setNegativeButton("取消", null); AlertDialog dialog = builder.create(); dialog.show(); ``` 在这个例子,我们创建了一个多选对话框,选项内容为 items 数组的五个字符串,初始状态都为未选。用户选择或取消选项时,会将 checkedItems 数组对应位置的值更新。当用户点击确定按钮时,我们可以遍历 checkedItems 数组,找出被选的选项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值