Dialog的dismiss和cancel
AlertDialog使用很方便,但是有一个问题就是:dismiss方法和cancel方法到底有什么不同?
今天有时间,看了看源码(其实源码并不是全都那么深奥的!~~)。
AlertDialog继承与Dialog,现在各位看看结构图:
[attachment=1826]
然后在Dialog类中找到了dismiss和cancel方法的实现。重要看dismiss的源码:
Java代码
public void cancel() {
if (mCancelMessage != null) {
// Obtain a new message so this dialog can be re-used
Message.obtain(mCancelMessage).sendToTarget();
}
dismiss();
}
看明白了吧! 在cancel方法中调用了dismiss方法。 但是现在还有一个问题就是:mCancelMessage是什么?
private Message mCancelMessage; // 这是源码中的声明
然后再来看源码:
Java代码
public void setOnCancelListener(final OnCancelListener listener) {
if (listener != null) {
mCancelMessage = mListenersHandler.obtainMessage(CANCEL, listener);
} else {
mCancelMessage = null;
}
}
public void setCancelMessage(final Message msg) {
mCancelMessage = msg;
}
现在问题清楚了,就是如果你在创建AlertDialog的时候调用了setOnCancelListener 这个mCancelMessage变量有作用,否则dismiss和cancel等同。
另外在看源代码的时候发现,Dialog还有一个方法叫做setCanceledOnTouchOutside,貌似挺有用的。
分享到:
相关推荐
由于设置了`setCanceledOnTouchOutside(true)`,当用户点击Dialog的阴影区域时,Dialog会响应`onTouch`事件并调用`cancel()`,进而触发`dismiss()`。因此,我们可以在触发`dismiss()`之前手动隐藏键盘。这可以通过...
执行`dialog.cancel()`不仅会像`dismiss()`一样移除对话框,更重要的是,如果已经注册了`DialogInterface.OnCancelListener`,它还会触发这个监听器。`OnCancelListener`是Android提供的一个接口,允许开发者在用户...
本教程将详细讲解如何在Android应用中使用`MaterialDialog`和`AlertDialog`实现倒计时功能,帮助开发者们提升用户体验。 首先,我们先了解`MaterialDialog`。`MaterialDialog`是Android的一款第三方库,它提供了...
在Android开发中,自定义对话框(Dialog)和Toast是两个常见的用户界面组件,用于向用户提供临时信息或在执行操作时显示加载状态。本篇将详细介绍如何创建具有Gif动画功能的自定义LoadingDialog和Toast。 一、...
在安卓开发中,Dialog控件是一种非常常见的组件,它用于...了解如何在Eclipse环境下创建和管理Dialog对于安卓开发者来说至关重要。在实际应用中,根据需求灵活运用Dialog控件,可以提高用户体验并实现更多元化的功能。
dialog.dismiss(); }); ``` 此外,我们还可以通过自定义主题(`style.xml`)来改变Dialog的外观,比如背景颜色、边框、动画效果等: ```xml <style name="MyCustomDialogTheme" parent="Theme.AppCompat.Light....
在Android开发中,自定义对话框(Dialog)是一种常见的用户交互方式,它可以提供更为丰富的界面样式和功能,增强用户体验。本教程将详细讲解如何创建一个仿新浪微博风格的自定义Dialog,该Dialog设计简洁且美观,...
在Android开发中,Dialog是一种非常常见的用户界面组件,它用于在主界面之上显示临时信息或者进行简单的交互。...在设计和实现Dialog时,始终要记住遵循Android的设计指南,保持一致性并提高可访问性。
在Android开发中,自定义Dialog是一种常见的用户交互方式,它能提供更加个性化和丰富的界面,以满足特定场景下的需求。本教程将详细讲解如何在Android应用中实现一个用于年龄选择输入的自定义Dialog。 首先,我们...
.setNegativeButton("取消", (dialog, which) -> dismiss()) // 设置取消按钮及其回调 ..setPositiveButton("确定", (dialog, which) -> { // 确定按钮的回调 }); return builder.create(); } } ``` 步骤三...
2. 动画效果:添加进入和退出动画,模拟iOS Dialog的弹出和消失效果。 3. 按钮样式:调整按钮的颜色、字体大小和样式,使其更接近iOS风格。 通过以上步骤,你可以在Android应用中创建一个高度仿iOS风格的Dialog效果...
dialog.dismiss(); } }); AlertDialog dialog = builder.create(); dialog.show(); ``` 第二种自定义Dialog则更加通用,它的样式类似于系统的弹出框,但允许开发者自由调整布局和提示内容。这通常涉及到更多的...
使用`dialog.show()`显示Dialog,`dialog.dismiss()`或`dialog.cancel()`关闭Dialog。注意,`dismiss()`会清除Dialog的实例,而`cancel()`则会触发`OnCancelListener`。 9. **处理点击事件** 可以通过设置`...
在Android开发中,自定义Dialog是一种常见的需求,它允许开发者根据应用的设计风格和功能需求创建具有独特外观和行为的对话框。本篇文章将深入探讨如何在Android中实现自定义Dialog,以及相关的知识点。 首先,我们...
- `dismiss()` 和 `cancel()`:用来关闭Dialog,`dismiss()`执行正常关闭,而`cancel()`通常会触发监听器中的`onCancel()`方法。 4. **Dialog的显示与隐藏**: - `show()` 方法用于显示Dialog,`hide()` 方法则...
dialog.dismiss(); // 关闭对话框 } }); builder.setView(dialogView); AlertDialog dialog = builder.create(); dialog.show(); ``` 在上述代码中,我们通过`LayoutInflater`将XML布局加载为一个View对象,然后...
在Android SDK中,我们可以直接使用AlertDialog.Builder来创建一个标准的Dialog,但这样的Dialog样式和功能较为固定。为了实现自定义,我们需要创建一个新的布局文件来设计Dialog的外观和交互元素。 1. 创建自定义...
dialog.dismiss(); } }); builder.create().show(); } } ``` 这里的关键点在于: - 使用`getLayoutInflater()`获取LayoutInflater实例。 - 通过`inflater.inflate()`加载定义好的Dialog布局文件。 - 设置...
- 要关闭Dialog,可以调用`dismiss()`方法。若需监听Dialog的关闭事件,可以重写`onDismiss(DialogInterface)`方法。同时,可以设置`setCancelable(boolean)`来控制用户是否可以通过点击背景或按返回键取消Dialog。...
SweetAlertDialog是一款在Android开发中广泛使用的对话框库,它提供了比原生Android对话框更为丰富的样式和功能。这款库特别适合那些希望为应用程序增添一些视觉吸引力的开发者,它可以创建出带有自定义标题、内容、...