`
lufengdie
  • 浏览: 247849 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Android UI学习 - 对话框 (AlertDialog & ProgressDialog)

阅读更多


显示对话框
    对话框经常作为Activity的一部分来创建和显示。你通常应该从protected Dialog Activity.onCreateDialog (int id) 回调方法里创建对话框。当你使用这个回调函数时,Android系统会有效的设置这个Activity为每个对话框的所有者,从而自动管理每个对话框的状态并挂靠到Activity上。这样,每个对话框继承这个Activity的特定属性。比如,当一个对话框打开时,菜单键显示为这个Activity定义的选项菜单,音量键修改Activity使用的音频流。

注意: 如果你决定在onCreateDialog()方法之外创建一个对话框,它将不会被附着到活动上。不过,你可以通过setOwnerActivity(Activity)把它附着到一个活动上。     当你想要显示一个对话框时,调用showDialog(int id) 方法并传递一个唯一标识这个对话框的整数。

    当对话框第一次被请求时,Android从你的Activity中调用onCreateDialog(int id),你应该在这里初始化这个对话框Dialog。这个回调方法被传以和showDialog(int id)相同的ID。当你创建这个对话框后,在Activity的最后返回这个对象。

    在对话框被显示之前,Android还调用了可选的回调函数onPrepareDialog(int id, Dialog). 如果你想在每一次对话框被打开时改变它的任何属性,你可以定义这个方法。这个方法在每次打开对话框时被调用,而onCreateDialog(int) 仅在对话框第一次打开时被调用。如果你不定义onPrepareDialog(),那么这个对话框将保持和上次打开时一样。这个方法也被传递以对话框的ID,和在onCreateDialog()中创建的对话框对象。(个人理解是,在本Activity里第一次show某个Dialog,则先调用onCreateDialog,得到返回的Dialog对象并挂靠在Activity,保存Dialog对象的引用,然后才显示Dialog。这样子,下次再show Dialog就不用重新创建Dialog对象,而是重用旧的)

    定义onCreateDialog(int) 和 onPrepareDialog(int, Dialog) 回调函数的最佳方法是使用一个switch 语句来检查传递进来的id 参数。每个case 应该检查一个唯一的对话框ID然后创建和定义相应的对话框。比如,想象一下一个游戏使用两个不同的对话框:一个用来指示这个游戏已经暂停而另一个来指示游戏结束。首先,为每个对话框定义一个常量:

static final int DIALOG_PAUSED_ID = 0; static final int DIALOG_GAMEOVER_ID = 1; 然后,为每一个ID用一个switch case定义这个onCreateDialog(int) 回调函数:

protected Dialog onCreateDialog(int id) {     Dialog dialog;     switch(id) {     case DIALOG_PAUSED_ID:         // do the work to define the pause Dialog         break;     case DIALOG_GAMEOVER_ID:         // do the work to define the game over Dialog         break;     default:         dialog = null;     }     return dialog; } 当是时候显示其中之一的对话框时,使用对话框ID调用showDialog(int):

showDialog(DIALOG_PAUSED_ID); 
消除对话框Dismissing a Dialog
    当你准备关闭对话框时,你可以通过对这个对话框调用dismiss()来消除它。如果需要,你还可以从这个Activity中调用dismissDialog(int id) 方法,这实际上将为你对这个对话框调用dismiss() 方法。

    如果你想使用onCreateDialog(int id) 方法来管理你对话框的状态(就如同在前面的章节讨论的那样),然后每次你的对话框消除的时候,这个对话框对象的状态将由该Activity保留。如果你决定不再需要这个对象或者清除该状态是重要的,那么你应该调用removeDialog(int id)。这将删除任何内部对象引用而且如果这个对话框正在显示,它将被消除。


使用消除侦听器Using dismiss listeners
    如果你希望你的应用程序在一个对话框消亡的时候执行一些流程,那么你应该附着一个on-dismiss侦听器到对话框上。

@Override protected void onPrepareDialog(int id, Dialog dialog) {     switch(id){     case PROGRESS_DIALOG:         dialog.setOnDismissListener(new DialogInterface.OnDismissListener(){             @Override             public void onDismiss(DialogInterface dialog) {                 Toast.makeText(getApplicationContext(),                         "dismiss listener!",                         Toast.LENGTH_SHORT)                 .show();             }         });     } }     然而, 请注意对话框也可以被“取消”。这是一个表明对话框被用户显示取消的特殊情况。这将在用户按“返回”按钮时发生,或者这个对话框显示的调用cancel() (也许通过对话框上的一个“取消”按钮)。当一个对话框被取消时,这个OnDismissListener 依然会被通知到,但是如果你希望在对话框被显示取消时被通知到(而不是通常的消除方式),那么你应该通过setOnCancelListener()注册一个DialogInterface.OnCancelListener 。

    目前个人学习发现,一般情况下,调用dialog.cancel()就会触发onCancelLister。而点击AlertDialog的NegativeButton (Cancel/No)是不会触发的。对于setOnCancelListener()要注意的是,这里有两个setOnCancelListener(),但返回值不同:

//AlertDialog.Builder调用的 public AlertDialog.Builder setOnCancelListener (DialogInterface.OnCancelListener onCancelListener)  //Dialog调用的 public void setOnCancelListener (DialogInterface.OnCancelListener listener) 
警告对话框AlertDialog的使用
    为了创建一个警告对话框,使用AlertDialog.Builder 子类。通过AlertDialog.Builder(Context)获取一个构造器然后使用这个类的公共方法来定义警告对话框的所有属性。当得到构造器后,通过create().方法来获取警告对话框对象。有时我是不调用create()的,而是在设置好了后直接调用show()显示AlertDialog。










增加按钮Adding buttons
    这就是我一开始很想知道的究竟如何添加Yes/No,Ok/Cancel这样的按钮。原来是通过setPositiveButton(...)响应Yes/Ok的点击,setNeutralButton(...)响应中立行为的点击,setNegativeButton(...)响应No/Cancel的点击。注意,只能各自设置一个按钮来响应点击事件。

AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Are you sure you want to exit?")        .setCancelable(false)        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {            public void onClick(DialogInterface dialog, int id) {                 MyActivity.this.finish();            }        })        .setNegativeButton("No", new DialogInterface.OnClickListener() {            public void onClick(DialogInterface dialog, int id) {                 dialog.cancel();            }        }); AlertDialog alert = builder.create();     首先,为这个对话框添加一个消息setMessage(CharSequence)。然后,开始函数链并设置该对话框为不能取消not cancelable (因此用户不能使用返回按钮关闭这个对话框)。对每个按钮,使用任一set...Button() 方法,比如setPositiveButton(),该方法接受按钮名称以及一个定义用户选中按钮后所采取动作的DialogInterface.OnClickListener。

增加一个列表Adding a list
final CharSequence[] items = {"Red", "Green", "Blue"};   AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Pick a color"); builder.setItems(items, new DialogInterface.OnClickListener() {     public void onClick(DialogInterface dialog, int item) {         Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();     } }); AlertDialog alert = builder.create();     首先,用setTitle(CharSequence)方法给对话框添加一个标题。然后,添加用setItems()添加一个可选项列表,该列表接受一组显示的items和一个DialogInterface.OnClickListener 来定义用户选中按钮后所采取动作。

增加复选框和单选按钮
    要在对话框里创建一个多选项列表(checkboxes)或者单选项(radio buttons),可分别调用setMultiChoiceItems() 和setSingleChoiceItems() 方法。如果你在onCreateDialog()回调函数中创建这些可选列表,Android会帮你管理列表状态。只要这个活动是激活的,对话框会记住之前选中的items,但如果用户退出这个活动,用户选择将丢失。

    注意: 为了在用户离开或暂停这个活动的时候能够保存选择,你必须通过活动生命期Activity Lifecycle来恰当的保存和恢复设置。为了永久保存选项,即使活动进程被完全终止,你需要使用数据存储Data Storage技术。

final CharSequence[] items = {"Red", "Green", "Blue"};   AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Pick a color"); builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {     public void onClick(DialogInterface dialog, int item) {         Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();     } }); AlertDialog alert = builder.create();     setSingleChoiceItems() 的第二个参数是一个checkedItem整型数值,指示了基于0的缺省选择项的位置。“-1”代表不会有默认选择项。


进度对话框Progress Dialog的使用
    ProgressDialog是AlertDialog类的一个扩展,可以为一个未定义进度的任务显示一个旋转轮形状的进度动画,或者为一个指定进度的任务显示一个进度条。

    可以简单地通过调用ProgressDialog.show()方法来显示一个进度对话框,而通过onCreateDialog(int)回调管理这个对话框是可选的,如下所示:

ProgressDialog.show(this, // context     "", // title     "Loading. Please wait...", // message     true); //进度是否是不确定的,这只和创建进度条有关 进度对话框的缺省类型是一个旋转轮,运行看到的是以下效果:




由于ProgressDialog是AlertDialog的扩展类,所以ProgressDialog也能设置按钮,比如一个取消下载的按钮。不过要注意的是,和前面的AlertDialog.Builder不同,ProgressDialog是调用AlertDialog的setButton,setButton2,setButton3函数,这些函数没有明确哪个是正面/中立/负面的,由我们决定。

显示进度条Showing a progress bar
而选择动画进度条显示进度:

1.   用类构造器初始化进度对话框,ProgressDialog(Context)。

2.   用setProgressStyle(int)方法设置进度风格为"STYLE_HORIZONTAL"以及设置其它属性,比如消息。

创建ProgressDialog大概是这样的:

ProgressDialog progressDialog = new ProgressDialog(getApplicationContext());    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  progressDialog.setIcon(R.drawable.alert_dialog_icon);  progressDialog.setMessage("Loading...");  progressDialog.setCancelable(false);  3.   当你准备显示这个对话框时,调用show()或者从onCreateDialog(int)回调中返回ProgressDialog。

4.   你可以通过调用setProgress(int)设置当前进度百分比或者调用incrementProgressBy(int)方法增加进度值。

官方文档提供了如何在另一线程来跟踪进程进度,让进度值变化。对此可以参考http://androidappdocs.appspot.com/guide/topics/ui/dialogs.html里面的代码。也可以查看后面的文章《有关Android线程的学习》里面的例子,看看如何使用Handler, Message机制!


创建自定义对话框Creating a Custom Dialog
    创建自定义对话框,首先要创建一个Layout xml 文件,在此不啰嗦了。然后加载Layout有两种方法,也是非常熟悉的那两种方法:

    1. setContentView(int resources id)

    2. 利用LayoutInflater加载

   官方还提示我们,一般使用Dialog类来创建对话框,是需要setTitle的,不设置的话,标题占用的空间保持为空,但仍然可见。而不想要那个标题,那应该使用警告对话框AlertDialog来创建自定义对话框。然而,因为警告对话框可以很简单的通过AlertDialog.Builder 类来创建,你并不需要访问上面使用的setContentView(int) 方法。相反,你必须使用setView(View),则需要使用LayoutInflater来加载Layout得到View。

具体代码参考http://androidappdocs.appspot.com/guide/topics/ui/dialogs.html




  • 大小: 3.7 KB
  • 大小: 3.7 KB
  • 大小: 5.1 KB
  • 大小: 11.9 KB
分享到:
评论

相关推荐

    Android移动开发-对话框.zip

    在Android移动应用开发中,对话框(Dialog)是一种常见的用户界面元素,用于向用户显示临时信息或要求用户提供输入。在Android系统中,对话框通常浮现在应用程序的主要活动(Activity)之上,提供一种非侵入式的交互...

    AlertDialog和ProgressDialog界面对话框的使用

    通过查看和学习这些代码,你将更好地理解如何在Android应用中创建和管理对话框,以及如何集成基本UI组件以提供更丰富的用户体验。记得在实际应用中,对话框的使用应遵循良好的设计原则,避免过度打扰用户,同时确保...

    Android---UI篇---Dialog(对话框)

    ### Android UI篇——Dialog(对话框) 在Android应用开发中,对话框(Dialog)作为用户交互的重要组成部分之一,被广泛应用于各种场景下,比如提示信息、请求确认操作、登录界面等。本文将深入探讨Android中Dialog的...

    学习笔记----Android的对话框

    - 示例代码:如何创建和使用各种类型的对话框,包括AlertDialog、ProgressDialog等。 - 自定义布局:可能展示了如何自定义对话框的布局和样式。 - 事件处理:可能包含按钮点击事件的处理代码。 - 动态更新:如果...

    Android之UI--打造12种不同Dialog对话框

    在Android开发中,UI设计是至关重要的一环,而Dialog对话框则是用户交互界面中的常见元素。本文将深入探讨如何打造12种不同类型的Dialog对话框,以满足各种场景下的需求。通过阅读CSDN博主dickyqie的文章,我们可以...

    android 自定义ProgressDialog对话框

    在Android开发中,ProgressDialog是一种常见的UI组件,用于在执行耗时操作时向用户显示进度,以提供更好的用户体验。默认的ProgressDialog通常包含一个圆形进度条,但有时为了满足特定的界面设计或功能需求,开发者...

    Android 对话框中的进度条 ProgressDialog

    在Android应用开发中,...虽然在新版本的Android中被弃用,但它仍然是学习Android UI和异步处理的重要知识点。理解ProgressDialog的工作原理和替代方案,可以帮助开发者创建更加友好且适应性强的用户体验。

    安卓Android源码——android-styled-dialogs 可自定义样式的dialog.rar

    1. **Android Dialog 基础**:首先,你需要对 Android 原生 Dialog 有一定的了解,知道如何创建基本的 AlertDialog 和 ProgressDialog。这是自定义 Dialog 的基础。 2. **自定义视图**:为了实现自定义样式,你需要...

    android 自定义对话框-IT计算机-毕业设计.zip

    标准的Android对话框包括AlertDialog、ProgressDialog等,但它们可能无法满足所有设计需求。自定义对话框则允许开发者根据自己的UI设计和功能需求,构建独一无二的对话框。 二、创建自定义对话框 1. **布局文件**:...

    android对话框

    总结起来,"android对话框"资源提供的Dialogfactory可能包含了多种预设好的对话框样式,开发者可以根据需求直接应用或作为参考进行修改,以适应应用程序的UI设计。通过理解以上Android对话框的相关知识点,开发者...

    安卓UI布局相关-AndroidUI组件库各种好看的组件.rar

    本资源"安卓UI布局相关-AndroidUI组件库各种好看的组件.rar"提供了多种美观的UI组件,供开发者们在构建应用时参考和使用。虽然无法确保每个组件都能直接运行,但它们可以作为学习和灵感的来源,开发者可以根据自己的...

    android-support-v4-v7-v13绝对最全

    - `AlertDialog`,`ProgressDialog`等对话框:提供统一的对话框API,兼容不同版本的Android。 - `PreferenceFragment`和`PreferenceScreen`:提供设置界面的布局和交互方式,便于创建自定义设置界面。 3. **...

    Android源码:进度条对话框Demo源码

    在Android开发中,进度条对话框(ProgressDialog)是用户界面中的一个重要组件,它通常用于在执行耗时操作如网络请求、文件下载或数据库操作时,向用户显示一个等待界面,以提升用户体验。在这个"Android源码:...

    android dialog 大合集 对话框 透明

    在Android开发中,对话框(Dialog)是一种非常重要的组件,用于与用户进行交互,提供临时信息、确认操作或展示选项。本大合集主要涵盖了Android中各种类型的对话框及其使用方法,旨在帮助开发者掌握对话框的全面应用...

    安卓Android源码——android-styled-dialogs 可自定义样式的dialog.zip

    通过对 `android-styled-dialogs` 的源码进行深入学习,开发者不仅可以掌握如何创建自定义 Dialog,还能提升对 Android 应用架构和 UI 设计的理解。源码阅读有助于培养解决问题的能力,以及提高代码复用和优化的意识...

    Android自定义加载对话框

    在Android中,系统提供了多种预设的对话框样式,如AlertDialog、ProgressDialog等。然而,这些预设样式可能无法满足所有设计需求,因此开发者通常需要自定义对话框以达到预期效果。自定义对话框通常涉及到布局文件的...

    android demo,进度条对话框Demo的源代码。

    在Android开发中,进度条对话框(ProgressDialog)是用户界面中的一个...通过这个Demo,开发者可以学习如何在Android应用中创建和管理进度条对话框,提升用户体验,同时了解异步任务处理、权限管理和UI交互等相关知识。

    android 对话框中的进度条 (ProgressDialog)

    在Android开发中,ProgressDialog是一个非常常见的组件,它用于在执行耗时操作时向用户展示一个带有进度指示器的对话框,比如数据加载、文件下载等。这个组件在用户界面交互中起到关键作用,保证了用户体验的流畅性...

    Android自定义对话框(代码)

    在Android开发中,自定义对话框(Custom Dialog)是一种常用的技术,它允许开发者根据应用的UI风格和功能需求创建个性化的对话框。本教程将详细讲解如何在Android中实现自定义对话框,并提供代码示例。 一、Android...

    android ui组件大全

    可能包括基本的视图(如TextView、ImageView)、布局(如LinearLayout、RelativeLayout、ConstraintLayout)、按钮(Button)、输入框(...RecyclerView)、网格(GridView)、对话框(AlertDialog、ProgressDialog)等...

Global site tag (gtag.js) - Google Analytics