Android--Dialog对话框

Android开发当中,在界面上弹出一个Dialog对话框使我们经常需要做的,本篇做一下记录,以备遗忘时查询。

dialog就是一个在屏幕上弹出一个可以让用户做出一个选择,或者输入额外的信息的对话框,一个对话框并不会沾满我们整个的屏幕,并且通常用于模型事件当中需要用户做出一个决定后才会继续执行。

Dialog类是dialog对话框的基类,但是我们应该避免直接使用这个类来实例化一个dialog对话框,我们应当使用其子类来得到一个对话框:

[java] view plain copy

 print?

  1. java.lang.Object  
  2.         android.app.Dialog  
  3.   
  4. Known Direct Subclasses  
  5. AlertDialog, CharacterPickerDialog, MediaRouteChooserDialog, MediaRouteControllerDialog, Presentation  
  6.   
  7. Known Indirect Subclasses  
  8. DatePickerDialog, ProgressDialog, TimePickerDialog  

我们看到,Dialog有很多的子类实现,所以我们要定义一个对话框,使用其子类来实例化一个即可,而不要直接使用Dialog这个父类来构造。

我们看到,AlertDialog是Dialog的一个直接子类。

使用AlertDialog,我们可以显示一个标题,最多3个按钮操作,以及一组选择框或者是自己定义的弹出框。

在AlertDialog中,定义按钮都是通过 setXXXButton 方法来完成,其中一共有3种不同的Action Buttons供我们选择:

[java] view plain copy

 print?

  1. 1.setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener)  
  2. 这是一个相当于OK、确定操作的按钮,  
  3.   
  4. 2.setNegativeButton (CharSequence text, DialogInterface.OnClickListener listener)  
  5. 这是一个相当于取消操作的按钮。  
  6.   
  7. 3. setNeutralButton (CharSequence text, DialogInterface.OnClickListener listener)  
  8. 这个是相当于一个忽略操作的按钮。  

我们每一种action buttons最多只能出现一个,即弹出对话框最多只能出现一个PositiveButton。

接下来我们通过一个一个的具体实例来看看我们常用的几种AlertDialog对话框。

1.弹出一个警告框,并有三个按钮可选择

我们来看看代码部分:

[java] view plain copy

 print?

  1. button.setOnClickListener(new OnClickListener()  
  2.         {  
  3.             @Override  
  4.             public void onClick(View v)  
  5.             {  
  6.                 //    通过AlertDialog.Builder这个类来实例化我们的一个AlertDialog的对象  
  7.                 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);  
  8.                 //    设置Title的图标  
  9.                 builder.setIcon(R.drawable.ic_launcher);  
  10.                 //    设置Title的内容  
  11.                 builder.setTitle("弹出警告框");  
  12.                 //    设置Content来显示一个信息  
  13.                 builder.setMessage("确定删除吗?");  
  14.                 //    设置一个PositiveButton  
  15.                 builder.setPositiveButton("确定", new DialogInterface.OnClickListener()  
  16.                 {  
  17.                     @Override  
  18.                     public void onClick(DialogInterface dialog, int which)  
  19.                     {  
  20.                         Toast.makeText(MainActivity.this, "positive: " + which, Toast.LENGTH_SHORT).show();  
  21.                     }  
  22.                 });  
  23.                 //    设置一个NegativeButton  
  24.                 builder.setNegativeButton("取消", new DialogInterface.OnClickListener()  
  25.                 {  
  26.                     @Override  
  27.                     public void onClick(DialogInterface dialog, int which)  
  28.                     {  
  29.                         Toast.makeText(MainActivity.this, "negative: " + which, Toast.LENGTH_SHORT).show();  
  30.                     }  
  31.                 });  
  32.                 //    设置一个NeutralButton  
  33.                 builder.setNeutralButton("忽略", new DialogInterface.OnClickListener()  
  34.                 {  
  35.                     @Override  
  36.                     public void onClick(DialogInterface dialog, int which)  
  37.                     {  
  38.                         Toast.makeText(MainActivity.this, "neutral: " + which, Toast.LENGTH_SHORT).show();  
  39.                     }  
  40.                 });  
  41.                 //    显示出该对话框  
  42.                 builder.show();  
  43.             }  
  44.         });  

我们如果要创建一个AlertDialog对话框,需要使用AlertDialog的一个内部类,即AlertDialog.Builder来构建一个AlertDialog的对话框,然后通过setXX方法来设置我们想要显示的内容即可。

我们看到,我们一共设置了3个action buttons,每一个button都为其绑定了一个 DialogInterface.OnClickListener() 的监听事件,然后在里面通过Toast吐司对话框(这个在后面随笔中会讲解)来弹出一下我们的一些信息,which方法表示的是action button所代表的int值:

[java] view plain copy

 print?

  1. positive:  -1  
  2. negative:  -2  
  3. neutral:  -3  

我们可以知道,which=-1就表示点击的是确定按钮,-2表示点击的是取消按钮,-3表示点击的是忽略按钮。

[java] view plain copy

 print?

  1. import android.app.Activity;  
  2. import android.app.AlertDialog;  
  3. import android.content.DialogInterface;  
  4. import android.os.Bundle;  
  5. import android.os.Handler;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9. import android.widget.Toast;  
  10.    
  11. public class SingleChoiceItemsTest extends Activity implements OnClickListener  
  12. {  
  13.     private String[] province = new String[] { "上海", "北京", "湖南", "湖北", "海南" };  
  14.     private Button btnSingleChoiceList;  
  15.     // 单击事件对象的实例  
  16.     private ButtonOnClick buttonOnClick = new ButtonOnClick(1);  
  17.    
  18.     /** Called when the activity is first created. */  
  19.     @Override  
  20.     public void onCreate(Bundle savedInstanceState)  
  21.     {  
  22.        super.onCreate(savedInstanceState);  
  23.        setContentView(R.layout.main);  
  24.    
  25.        btnSingleChoiceList = (Button) findViewById(R.id.btnSingleChoice);  
  26.        btnSingleChoiceList.setOnClickListener(this);  
  27.     }  
  28.    
  29.     @Override  
  30.     public void onClick(View v)  
  31.     {  
  32.        showSingleChoiceButton();  
  33.     }  
  34.    
  35.     // 在单选选项中显示 确定和取消按钮  
  36.     //buttonOnClickg变量的数据类型是ButtonOnClick,一个单击事件类  
  37.     private void showSingleChoiceButton()  
  38.     {  
  39.        AlertDialog.Builder builder = new AlertDialog.Builder(this);  
  40.        builder.setTitle("请选择省份");  
  41.        builder.setSingleChoiceItems(province, 0, buttonOnClick);  
  42.        builder.setPositiveButton("确定", buttonOnClick);  
  43.        builder.setNegativeButton("取消", buttonOnClick);  
  44.        builder.show();  
  45.     }  
  46.    
  47.     private class ButtonOnClick implements DialogInterface.OnClickListener  
  48.     {  
  49.         
  50.        private int index; // 表示选项的索引  
  51.    
  52.        public ButtonOnClick(int index)  
  53.        {  
  54.            this.index = index;  
  55.        }  
  56.    
  57.        @Override  
  58.        public void onClick(DialogInterface dialog, int which)  
  59.        {  
  60.            // which表示单击的按钮索引,所有的选项索引都是大于0,按钮索引都是小于0的。  
  61.            if (which >= 0)  
  62.            {  
  63.               //如果单击的是列表项,将当前列表项的索引保存在index中。  
  64.               //如果想单击列表项后关闭对话框,可在此处调用dialog.cancel()  
  65.               //或是用dialog.dismiss()方法。  
  66.               index = which;  
  67.            }  
  68.            else  
  69.            {  
  70.               //用户单击的是【确定】按钮  
  71.               if (which == DialogInterface.BUTTON_POSITIVE)  
  72.               {  
  73.                   //显示用户选择的是第几个列表项。  
  74.                   final AlertDialog ad = new AlertDialog.Builder(  
  75.                           SingleChoiceItemsTest.this).setMessage(  
  76.                           "你选择的地区是:" + index + ":" + province[index]).show();  
  77.                   //五秒钟后自动关闭。  
  78.                   Handler hander = new Handler();  
  79.                   Runnable runnable = new Runnable()  
  80.                   {  
  81.    
  82.                      @Override  
  83.                      public void run()  
  84.                      {  
  85.                          ad.dismiss();  
  86.                      }  
  87.                   };  
  88.                   hander.postDelayed(runnable, 5 * 1000);  
  89.               }  
  90.               //用户单击的是【取消】按钮  
  91.               else if (which == DialogInterface.BUTTON_NEGATIVE)  
  92.               {  
  93.                   Toast.makeText(SingleChoiceItemsTest.this, "你没有选择任何东西",  
  94.                           Toast.LENGTH_LONG);  
  95.               }  
  96.            }  
  97.        }  
  98.     }  
  99. }  

弹出一个下拉单选框

[java] view plain copy

 print?

  1. button3.setOnClickListener(new OnClickListener()  
  2.         {  
  3.             @Override  
  4.             public void onClick(View v)  
  5.             {  
  6.                 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);  
  7.                 builder.setIcon(R.drawable.ic_launcher);  
  8.                 builder.setTitle("请选择性别");  
  9.                 final String[] sex = {"男", "女", "未知性别"};  
  10.                 //    设置一个单项选择下拉框  
  11.                 /** 
  12.                  * 第一个参数指定我们要显示的一组下拉单选框的数据集合 
  13.                  * 第二个参数代表索引,指定默认哪一个单选框被勾选上,1表示默认'女' 会被勾选上 
  14.                  * 第三个参数给每一个单选项绑定一个监听器 
  15.                  */  
  16.                 builder.setSingleChoiceItems(sex, 1, new DialogInterface.OnClickListener()  
  17.                 {  
  18.                     @Override  
  19.                     public void onClick(DialogInterface dialog, int which)  
  20.                     {  
  21.                         Toast.makeText(MainActivity.this, "性别为:" + sex[which], Toast.LENGTH_SHORT).show();  
  22.                     }  
  23.                 });  
  24.                 builder.setPositiveButton("确定", new DialogInterface.OnClickListener()  
  25.                 {  
  26.                     @Override  
  27.                     public void onClick(DialogInterface dialog, int which)  
  28.                     {  
  29.                           
  30.                     }  
  31.                 });  
  32.                 builder.setNegativeButton("取消", new DialogInterface.OnClickListener()  
  33.                 {  
  34.                     @Override  
  35.                     public void onClick(DialogInterface dialog, int which)  
  36.                     {  
  37.                           
  38.                     }  
  39.                 });  
  40.                 builder.show();  
  41.             }  
  42.         });  

注意:在弹出下拉单选框时,当我们选中一个选项,对话框是不会消失的,我们需要点击action button才能让对话框消失。

弹出一个下拉多选框

[java] view plain copy

 print?

  1. button4.setOnClickListener(new OnClickListener()  
  2.         {  
  3.             @Override  
  4.             public void onClick(View v)  
  5.             {  
  6.                 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);  
  7.                 builder.setIcon(R.drawable.ic_launcher);  
  8.                 builder.setTitle("爱好");  
  9.                 final String[] hobbies = {"篮球", "足球", "网球", "斯诺克"};  
  10.                 //    设置一个单项选择下拉框  
  11.                 /** 
  12.                  * 第一个参数指定我们要显示的一组下拉多选框的数据集合 
  13.                  * 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择, 
  14.                  * 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true}; 
  15.                  * 第三个参数给每一个多选项绑定一个监听器 
  16.                  */  
  17.                 builder.setMultiChoiceItems(hobbies, null, new DialogInterface.OnMultiChoiceClickListener()  
  18.                 {  
  19.                     StringBuffer sb = new StringBuffer(100);  
  20.                     @Override  
  21.                     public void onClick(DialogInterface dialog, int which, boolean isChecked)  
  22.                     {  
  23.                         if(isChecked)  
  24.                         {  
  25.                             sb.append(hobbies[which] + ", ");  
  26.                         }  
  27.                         Toast.makeText(MainActivity.this, "爱好为:" + sb.toString(), Toast.LENGTH_SHORT).show();  
  28.                     }  
  29.                 });  
  30.                 builder.setPositiveButton("确定", new DialogInterface.OnClickListener()  
  31.                 {  
  32.                     @Override  
  33.                     public void onClick(DialogInterface dialog, int which)  
  34.                     {  
  35.                           
  36.                     }  
  37.                 });  
  38.                 builder.setNegativeButton("取消", new DialogInterface.OnClickListener()  
  39.                 {  
  40.                     @Override  
  41.                     public void onClick(DialogInterface dialog, int which)  
  42.                     {  
  43.                           
  44.                     }  
  45.                 });  
  46.                 builder.show();  
  47.             }  
  48.         });  

同样,对于下拉多选框,当我们选中其中一个选项时,对话框是不会消失的,只有点击了action button才会消失。

转载:http://blog.csdn.net/chaoyu168/article/details/50753095

时间: 2024-08-02 00:50:32

Android--Dialog对话框的相关文章

Android Dialog对话框用法实例详解_Android

本文实例讲述了Android Dialog对话框用法.分享给大家供大家参考,具体如下: Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int),dismissDialog(int)等方法,如果使用这些方法的话,Activity将通过getOwnerActivity()方法返回该Activity管理的对话框(dialog). 1. onCreat

Android Dialog 对话框详解及示例代码_Android

Android Dialog 对话框 1.Dialog介绍 2.AlertDialog的基本使用 3.自定义对话框 Custom Dialog 一.Dialog介绍 Dialog也是Android中常用的用户界面元素,他同Menu一样也不是View的子类.让我们看一下它的继承关系: 这里要留意一下他的直接子类 AlertDialog,和间接子类 DatePickerDialog,ProgressDialog,TimePickerDialog,其中后三个我们在前面的章节已经讲过,今天我们把重点放在

Android Dialog对话框详解_Android

废话不多说了,直接给大家贴代码了. 布局文件xml: <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_paren

详解Android Dialog对话框的五种形式

Android中的对话框形式大致可分为五种:分别是一般对话框形式,列表对话框形式,单选按钮对话框,多选按钮对话框,自定义对话框. 在实际开发中,用系统的对话框会很少,因为太丑了,美工不愿意,多是使用自定义对话框.当然学会系统的,自定义就简单了,所以我们先来学习系统的,后面在写一篇自定义对话框. 一般对话框: 不多说先上图: 代码: private void dialog1(){ AlertDialog.Builder builder=new AlertDialog.Builder(this);

7种形式的Android Dialog使用实例_Android

在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,在我们使用Android的过程中,我归纳了一下,Android Dialog的类型无非也就7种,下面我分别向大家介绍这7种Android Dialog对话框的使用方法,希望对大家能有所帮助.1.该效果是当按返回按钮时弹出一个提示,来确保无误操作,采用常见的对话框样式. 创建dialog对话框方法代码如下: protected void dia

Android 继承DialogFragment弹出dialog对话框

相信现在Android软件开发员,都经常用到这种方式弹出对话框的.Android继承DialogFragment弹出dialog对话框,这样弹出有很多可以灵活处理地方,想什么启动,什么时候数据接口返回都可以,有自已layout布局,生命周期.下面看看我写demo. 本文代码下载:请点击这里 转载请注明出处: http://blog.csdn.net/qq_16064871 一.MainActivity [java] view plaincopy package com.example.fragm

Android中制作自定义dialog对话框的实例分享_Android

自定义dialog基础版很多时候,我们在使用android sdk提供的alerdialog的时候,会因为你的系统的不同而产生不同的效果,就好比如你刷的是MIUI的系统,弹出框都会在顶部显示!这里简单的介绍自定义弹出框的应用. 首先创建布局文件dialog: 代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.andr

Android中Dialog对话框的使用小结

前言 最近有些空时间,所以花了一个小时对Dialog对话框使用小结一下,比较基础,希望对你学习有帮助,大牛请直接关闭网页.如果你是新手,建议你亲自敲一遍代码. 先看一下效果: Dialog对话框使用小结 一.普通对话框 AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle("温馨提示");//标题 builder.setMessage("天气冷,注意保暖")

Android UI系列-----Dialog对话框示例

在Android开发当中,在界面上弹出一个Dialog对话框使我们经常需要做的,本篇随笔将详细的讲解Dialog对话框这个概念,包括定义不同样式的对话框. 一.Dialog 我们首先来看看android官方文档对Dialog的介绍 A dialog is a small window that prompts the user to make a decision or enter additional information. A dialog does not fill the screen

Android开发之缓冲dialog对话框创建、使用与封装操作

本文实例讲述了Android开发之缓冲dialog对话框创建.使用与封装操作.分享给大家供大家参考,具体如下: package com.hstech.handysystem.prompt; import android.app.Dialog; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.widget.TextView; import com.hstec