前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >速读原著-Android应用开发入门教程(弹出对话框)

速读原著-Android应用开发入门教程(弹出对话框)

作者头像
cwl_java
发布2020-02-13 17:05:25
1.4K0
发布2020-02-13 17:05:25
举报
文章被收录于专栏:cwl_Javacwl_Javacwl_Java

6.6 弹出对话框

在 GUI 程序中,有时需要弹出对话框来提示一些信息。这些对话框比一个独立的屏幕简单,在 Android 中弹出式对话框不同于表示一个屏幕的活动,它通常用于简单的功能处理。

对话框的父类是 android.app.Dialog,通过构建类 android.app.AlertDialog 来实现弹出式对话框,可以使用AlertDialog.Builder 和不同的参数来构建对话框。

参考示例程序:Dialog(ApiDemo => App=>Dialog)

源代码:com/example/android/apis/app/AlertDialogSamples.java 布局文件:alert_dialog.xml Dialog 程序的运行结果如图所示:

在这里插入图片描述
在这里插入图片描述

通过点击屏幕上的不同按钮(第 4 个按钮除外)将会启动不同的对话框。实现方法是继承 onCreateDialog()函数,返回一个 Dialog 类型:

@Override 
 protected Dialog onCreateDialog(int id) { 
 }

onCreateDialog()函数的参数 id 是区分对话框的标示,当调用对话框的时候需要调用 showDialog()

public final void showDialog (int id)

showDialog()函数也是通过 id 来区分对话框。通过 showDialog()和onCreateDialog()函数可以统一活动中的对话框。

6.6.1. 提示信息和两个按钮的对话框

第 1 个按钮(OK Cancel dialog with a message)启动一个提示信息和两个按钮的对话框,如图所示:

在这里插入图片描述
在这里插入图片描述

代码实现的片断如下所示:

 return new AlertDialog.Builder(AlertDialogSamples.this) 
	 .setIcon(R.drawable.alert_dialog_icon) 
	 .setTitle(R.string.alert_dialog_two_buttons_title) 
	 .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() { 
		 public void onClick(DialogInterface dialog, int whichButton) { 
		 /* 左键事件 */ 
		 } 
		 }) 
	 .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() { 
		 public void onClick(DialogInterface dialog, int whichButton) { 
		 /* 右键事件 */ 
		 } 
		 })

其中,setPositiveButton 表示设置的左面的按钮,setNegativeButton 表示设置的右面的按钮,这两个按钮是确定的,但是可以设置其显示的字符和点击后的行为函数。

6.6.2. 提示信息和三个按钮的对话框

第 2 个按钮(OK Cancel dialog with a long message)启动一个提示信息和三个按钮的对话框,如图所示:

在这里插入图片描述
在这里插入图片描述

代码实现的片断如下所示:

 return new AlertDialog.Builder(AlertDialogSamples.this) 
 .setIcon(R.drawable.alert_dialog_icon) 
 .setTitle(R.string.alert_dialog_two_buttons_msg) 
 .setMessage(R.string.alert_dialog_two_buttons2_msg) 
 .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() { 
	 public void onClick(DialogInterface dialog, int whichButton) { 
		 /* 左键事件 */ 
		 } 
	 }) 
	 .setNeutralButton(R.string.alert_dialog_something, new DialogInterface.OnClickListener() { 
		 public void onClick(DialogInterface dialog, int whichButton) { 
		 /* 中键事件 */ 
		 } 
	 }) 
	 .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() { 
		 public void onClick(DialogInterface dialog, int whichButton) { 
		 /* 右键事件 */ 
		 } 
	 })

本对话框包含了 3 个按钮,与上一个例子的主要区别在于这里使用了 setNeutralButton()表示的设置中间的按钮。

6.6.3. 列表项对话框

第 3 个按钮(List dialog)启动一个列表项对话框,如图所示;

在这里插入图片描述
在这里插入图片描述

代码实现的片断如下所示:

return new AlertDialog.Builder(AlertDialogSamples.this) 
 .setTitle(R.string.select_dialog) 
 .setItems(R.array.select_dialog_items, new DialogInterface.OnClickListener() { 
	 public void onClick(DialogInterface dialog, int which) { 
	 String[] items = 
	 getResources().getStringArray(R.array.select_dialog_items); 
	 new AlertDialog.Builder(AlertDialogSamples.this) 
	 .setMessage("You selected: " + which + " , " + items[which]) 
	 .show(); 
	 } 
	 })

这里使用了 setItems()表示设置几个不同的项目,从 res/values/array.xml 文件中取得 select_dialog_items 的内容,这部分内容如下所示:

<string-array name="select_dialog_items"> 
	 <item>Command one</item> 
	 <item>Command two</item> 
	 <item>Command three</item> 
	 <item>Command four</item> 
 </string-array>

这里的 Item 也设置了点击函数,因此它们被点击后,也会弹出新的对话框。

6.6.4. 单选项和按钮对话框

第 5 个按钮(Single choice list)启动一个单选项和按钮对话框;

在这里插入图片描述
在这里插入图片描述

代码实现的片断如下所示:

 return new AlertDialog.Builder(AlertDialogSamples.this) 
 .setIcon(R.drawable.alert_dialog_icon) 
 .setTitle(R.string.alert_dialog_single_choice) 
	 .setSingleChoiceItems(R.array.select_dialog_items2, 0, new DialogInterface.OnClickListener() { 
		 public void onClick(DialogInterface dialog, int whichButton) { 
		 } 
	 }) 
	 .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() { 
		 public void onClick(DialogInterface dialog, int whichButton) { 
		 /* 左键事件 */ 
		 } 
	 }) 
	 .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() { 
		 public void onClick(DialogInterface dialog, int whichButton) { 
		 /* 右键事件 */ 
		 } 
	 })

本例是一个包含单选项的对话框,其中的选项使用了更简单的模式,从res/values/array.xml 文件中取得 select_dialog_items2 中的内容作为单选项的项目。这部分的内容如下所示:

<string-array name="select_dialog_items2"> 
	 <item>Map</item> 
	 <item>Satellite</item> 
	 <item>Traffic</item> 
	 <item>Street view</item> 
 </string-array>

6.6.5. 复选项和按钮对话框

第 6 个按钮(Repeat alarm)启动一个复选项和按钮对话框;

在这里插入图片描述
在这里插入图片描述

代码实现的片断如下所示:

     return new AlertDialog.Builder(AlertDialogSamples.this)
            .setIcon(R.drawable.ic_popup_reminder) 
 .setTitle(R.string.alert_dialog_multi_choice) 
 .setMultiChoiceItems(R.array.select_dialog_items3, 
 new boolean[]{false, true, false, true, false, false, false},
            new DialogInterface.OnMultiChoiceClickListener() {
        public void onClick(DialogInterface dialog, int whichButton,
        boolean isChecked) {
            /* 点击复选框的响应 */
        }
    })
            .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            /* 左键事件 */
        }
    })
            .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            /* 右键事件 */
        }
    })
            .create();

本例是一个包含复选项的对话框,从 res/values/array.xml 文件中取得 select_dialog_items3 中的内容作为单选项的项目:

 <string-array name="select_dialog_items3"> 
	 <item>Every Monday</item> 
	 <item>Every Tuesday</item> 
	 <item>Every Wednesday</item> 
	 <item>Every Thursday</item> 
	 <item>Every Friday</item> 
	 <item>Every Saturday</item> 
	 <item>Every Sunday</item> 
 </string-array>

6.6.6. 文本的按键对话框(使用布局文件)

第 7 个按钮(Text Entry dialog)启动一个包含文本的按键对话框。 Dialog 程序中调用各个对话框的效果如图所示:

在这里插入图片描述
在这里插入图片描述

代码实现的片断如下所示:

    LayoutInflater factory = LayoutInflater.from(this);
    final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry,
            null); 
 return new AlertDialog.Builder(AlertDialogSamples.this)
            .setIcon(R.drawable.alert_dialog_icon) 
 .setTitle(R.string.alert_dialog_text_entry) 
 .setView(textEntryView) 
 .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            /* 左键事件 */
        }
    })
            .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            /* 右键事件 */
        }
    })
            .create();
}

alert_dialog_text_entry.xml 也是一个布局文件,其中包含了 2 个文本框和 2 个可编辑文本,这就是显示在屏幕上的内容,由此根据这种模式,也可以在弹出的对话框中使用布局文件。

由此,在这个对话框中,包含了这些相应的控件。

如上面对话框的效果所示,对话框可以设置标题、图标、提示信息、最多 3 个按钮、单选项、复选项,甚至可以设置一个 View。最后一个对话框是通过设置一个 View 来实现的,设置的内容在布局文件 alert_dialog_text_entry.xml中。

对话框的类为 android.app.Dialog,通过 android.app.AlertDialog.Builder 类来建立,在建立的过程中可以进行多项设置。

  • setIcon()setTitle():用于设置图标和标题;
  • setMessage():用于设置提示信息;
  • setPositiveButton()setNeutralButton()setNegativeButton():用于设置左、中、右按钮;
  • setSingleChoiceItems()setMultiChoiceItems():用于设置单选项和复选项;
  • setView():用于设置一个 View 作为对话框的内容。

以上函数的返回类型均为 android.app.AlertDialog.Builder,也就是这个类本身,因此可以使用如下的方式进行连续调用来设置更多的内容。

设置完成后调用 create()函数返回 android.app.AlertDialog 类,这个类表示一个可以使用的对话框。在 Android 中使用对话框,可以在没有 Activity 的情况下建立一个比较简易的窗体,基本界面可以通过直接设置得到,通过 setView()可以获得任意内容的界面。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 6.6 弹出对话框
    • 6.6.1. 提示信息和两个按钮的对话框
      • 6.6.2. 提示信息和三个按钮的对话框
        • 6.6.3. 列表项对话框
          • 6.6.4. 单选项和按钮对话框
            • 6.6.5. 复选项和按钮对话框
              • 6.6.6. 文本的按键对话框(使用布局文件)
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档