Android Dialog

Android 代码优化:“这个需求很简单,怎么实现我不管” 背景 before: 在我们APP启动过程,我们可能常常有这样的需求:在APP第一次进入的时候根据网络请求的结果弹一个对话框式的广告, ok~ 很简单,那么代码大致就是这样(这边都是伪代码,为了方便理解): @Override protected void onCreate(@Nullable Bundle savedInstanceState) { chec... 阅读详情

创建对话框

一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户交互. 对话框一般用于提示信息和与当前应用程序直接相关的小功能.

Android API 支持下列类型的对话框对象:

  • 警告对话框 AlertDialog:  一个可以有0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可以创建大多数的交互界面, 是推荐的类型.
  • 进度对话框 ProgressDialog:  显示一个进度环或者一个进度条. 由于它是AlertDialog的扩展, 所以它也支持按钮.
  • 日期选择对话框 DatePickerDialog:  让用户选择一个日期.
  • 时间选择对话框 TimePickerDialog:  让用户选择一个时间.

如果你希望自定义你的对话框, 可以扩展Dialog类.

Showing a Dialog 显示对话框

一个对话框总是被创建和显示为一个Activity的一部分. 你应该在Activity的onCreateDialog(int)中创建对话框. 当你使用这个回调函数时,Android系统自动管理每个对话框的状态并将它们和Activity连接, 将Activity变为对话框的"所有者". 这样,每个对话框从Activity继承一些属性. 例如,当一个对话框打开时, MENU键会显示Activity的菜单, 音量键会调整Activity当前使用的音频流的音量.

 

注意: 如果你希望在onCreateDialog()方法之外创建对话框, 它将不会依附在Activity上. 你可以使用setOwnerActivity(Activity)来将它依附在Activity上.

当你希望显示一个对话框时, 调用showDialog(int)并将对话框的id传给它.

当一个对话框第一次被请求时,Android调用onCreateDialog(int). 这里是你初始化对话框的地方. 这个回调函数传入的id和showDialog(int)相同. 创建对话框之后,将返回被创建的对象.

在对话框被显示之前,Android还会调用onPrepareDialog(int, Dialog). 如果你希望每次显示对话框时有动态更改的内容, 那么就改写这个函数. 该函数在每次一个对话框打开时都调用. 如果你不定义该函数,则对话框每次打开都是一样的. 该函数也会传入对话框的id以及你在onCreateDialog()中创建的Dialog对象.

最好的定义onCreateDialog(int) 和onPrepareDialog(int, Dialog) 的方法就是使用一个switch语句来检查传入的id. 每个case创建相应的对话框. 例如, 一个游戏使用两个对话框: 一个来指示游戏暂停,另一个指示游戏结束. 首先, 为它们定义ID:

然后, 在onCreateDialog(int)中加入一个switch语句:

注意: 在这个例子中, case语句为空因为定义Dialog的程序在后面会有介绍.

在需要显示对话框是, 调用showDialog(int), 传入对话框的id:

showDialog(DIALOG_PAUSED_ID);Dismissing a Dialog 解除对话框

当你准备关闭对话框时, 你可以使用dismiss()函数. 如果需要的话, 你也可以从Activity调用dismissDialog(int), 二者效果是一样的.

如果你使用onCreateDialog(int)来管理你的对话框的状态, 那么每次你的对话框被解除时, 该对话框对象的状态会被Activity保存. 如果你决定你不再需要这个对象或者需要清除对话框的状态, 那么你应该调用 removeDialog(int). 这将把所有该对象的内部引用移除, 如果该对话框在显示的话将被解除.

Using dismiss listeners 使用解除监听器

如果你希望在对话框解除时运行某些程序, 那么你应该给对话框附加一个解除监听器.

首先定义DialogInterface.OnDismissListener接口. 这个接口只有一个方法, onDismiss(DialogInterface), 该方法将在对话框解除时被调用.

然后将你的OnDismissListener实现传给setOnDismissListener().

然而,注意对话框也可以被"取消". 这是一个特殊的情形, 它意味着对话框被用户显式的取消掉. 这将在用户按下"back"键时, 或者对话框显式的调用cancel()(按下对话框的cancel按钮)时发生. 当一个对话框被取消时, OnDismissListener将仍然被通知, 但如果你希望在对话框被显示取消(而不是正常解除)时被通知, 则你应该使用setOnCancelListener()注册一个DialogInterface.OnCancelListener.

Creating an AlertDialog 创建警告对话框

An AlertDialog is an extension of the Dialog class. It is capable of constructing most dialog user interfaces and is the suggested dialog type. You should use it for dialogs that use any of the following features:

一个警告对话框是对话框的一个扩展. 它能够创建大多数对话框用户界面并且是推荐的对话框类新星. 对于需要下列任何特性的对话框,你都应该使用它:

  • 一个标题
  • 一条文字消息
  • 1个-3个按钮
  • 一个可选择的列表(单选框或者复选框)

要创建一个AlertDialog, 使用AlertDialog.Builder子类. 使用AlertDialog.Builder(Context)来得到一个Builder, 然后使用该类的公有方法来定义AlertDialog的属性. 设定好以后, 使用create()方法来获得AlertDialog对象.

下面的主题展示了如何为AlertDialog定义不同的属性, 使用AlertDialog.Builder类. 如果你使用这些示例代码, 你可以在onCreateDialog()中返回最后的Dialog对象来获得图片中对话框的效果.


Adding buttons 增加按钮


要创建一个如图所示的窗口, 使用set...Button()方法:

首先,使用setMessage(CharSequence)为对话框增加一条消息。 然后, 开始连续调用方法, 使用setCancelable(boolean)将对话框设为不可取消(不能使用back键来取消)。对每一个按钮,使用set...Button()方法,该方法接受按钮名称和一个DialogInterface.OnClickListener,该监听器定义了当用户选择该按钮时应做的动作。

注意:对每种按钮类型,只能为AlertDialog创建一个。也就是说,一个AlertDialog不能有两个以上的"positive"按钮。这使得可能的按钮数量最多为三个:肯定、否定、中性。这些名字和实际功能没有联系,但是将帮助你记忆它们各做什么事情。

Adding a list 增加列表


要创建一个具有可选项的AlertDialog,使用setItems()方法:

首先增加一个标题。然后使用setItems()增加一个可选列表,该列表接受一个选项名称的列表和一个DialogInterface.OnClickListener, 后者定义了选项对应的响应。

Adding checkboxes and radio buttons 增加单选框和复选框:


要创建一个带有多选列表或者单选列表的对话框, 使用setMultiChoiceItems()和setSingleChoiceItems()方法。如果你在onCreateDialog()中创建可选择列表, Android会自动管理列表的状态. 只要activity仍然活跃, 那么对话框就会记住刚才选中的选项,但当用户退出activity时,该选择丢失。

注意: 要在你的acitivity离开和暂停时保存选择, 你必须在activity的声明周期中正确的保存和恢复设置。为了永久性保存选择,你必须使用数据存储技术中的一种。

要创建一个具有单选列表的AlertDialog,只需将一个例子中的setItems()换成 setSingleChoiceItems():

第二个参数是默认被选中的选项位置,使用“-1”来表示默认情况下不选中任何选项。

Creating a ProgressDialog 创建进度对话框


一个ProgressDialog(进度对话框)是AlertDialog的扩展。它可以显示一个进度的动画——进度环或者进度条。这个对话框也可以提供按钮,例如取消一个下载等。

打开一个进度对话框很简单,只需要调用 ProgressDialog.show()即可。例如,上图的对话框可以不通过onCreateDialog(int),而直接显示:

ProgressDialog dialog = ProgressDialog.show(MyActivity.this, "",
                        
"Loading. Please wait...", true);

第一个参数是应用程序上下文。第二个为对话框的标题(这里为空),第三个为对话框内容, 最后一个为该进度是否为不可确定的(这只跟进度条的创建有关,见下一节)。

进度对话框的默认样式为一个旋转的环。如果你希望显示进度值,请看下一节。

Showing a progress bar 显示进度条

使用一个动画进度条来显示进度:

  1. 使用 ProgressDialog(Context)构造函数来初始化一个ProgressDialog对象。
  2. 将进度样式设置为"STYLE_HORIZONTAL",使用setProgressStyle(int)方法。并且设置其它属性,例如内容等。
  3. 在需要显示时调用show()或者从onCreateDialog(int)回调函数中返回该ProgressDialog。
  4. 你可以使用 setProgress(int)或者incrementProgressBy(int)来增加显示的进度。

例如,你的设置可能像这样:

设置很简单。大部分创建进度对话框需要的代码是在更新它的进程中。你可能需要在一个新的线程中更新它,并使用Handler来将进度报告给Activity。如果你不熟悉使用Handler和另外的线程,请看下列例子,该例子使用了一个新的线程来更新进度。

Example ProgressDialog with a second thread 例--使用一个线程来显示进度对话框

这个例子使用一个线程来跟踪一个进程的进度(其实为从1数到100)。每当进度更新时,该线程通过Handler给主activity发送一个消息。主Activity更新ProgressDialog.

Creating a Custom Dialog 创建自定义对话框

如果你想自定义一个对话框,你可以使用布局元素来创造你的对话框的布局。定义好布局后,将根View对象或者布局资源ID传给setContentView(View).

例如,创建如图所示的对话框:

1、创建一个xml布局custom_dialog.xml:

该xml定义了一个LinearLayout中的一个ImageView 和一个TextView。

2、将以上布局设为对话框的content view,并且定义ImageView 和 TextView的内容:

在初始化Dialog之后,使用setContentView(int),将布局资源id传给它。现在Dialog有一个定义好的布局,你可以使用findViewById(int)来找到该元素的id并修改它的内容。

3、、使用前面所讲的方法显示对话框。

一个使用Dialog类建立的对话框必须有一个标题。如果你不调用setTitle(),那么标题区域会保留空白。如果你不希望有一个标题,那么你应该使用AlertDialog类来创建自定义对话框。然而,由于一个AlertDialog使用AlertDialog.Builder类来建立最方便,所以你没有方法使用setContentView(int),而是只能使用setView(View)。该方法接受一个View对象,所以你需要从xml中展开你的根View。

要展开一个xml布局,使用 getLayoutInflater() (或 getSystemService())取得LayoutInflater,然后调用inflate(int, ViewGroup),第一个参数为布局id,而第二个参数为根view的id。现在,你可以使用展开后的布局来找到View对象并定义ImageView和TextView元素的内容。然后实例化AlertDialog.Builder并使用setView(View)来为对话框设置展开后的布局。

例如:

使用AlertDialog来自定义对话框,可以利用其内置特性例如按钮、选择列表、标题、图标等。

Android Dialog详解 在Android开发过程中我们经常会遇到如下的场景: 在界面上弹出一个弹框,对用户进行提醒,并让用户做出某些选择性的操作                                                               删除某个应用的系统级别的Dialog                                                           ... 阅读详情

相关推荐

银河麒麟服务器操作系统V10 SP1:跨架构激活与设备更换无忧指南

本文详细解析了银河麒麟服务器操作系统V10 SP1的跨架构激活新特性。该特性彻底解除了授权与CPU架构的绑定,允许同一份授权在x86、ARM、龙芯等不同架构服务器间灵活使用。文章提供了从新设备激活到硬件更换后保持激活状态的全流程实战指南,并分享了内网环境部署等高级技巧,助力企业简化运维、提升硬件资源管理灵活性。

ff678的博客 353

android_基础_dialog的setOnDismissListener

setOnDismissListener作用 (showDialog和onCreateDialog) 先说下Activity里面有showDialog和onCreateDialog两个函数: 在某个地方你想弹出一个dialog,可以这样做,在onCreateDialog里面new一个Diloag,然后在想要触发dialog的地方调用showDialog即可。 showDialog(id)先是从缓存也就是hashMap里面查看有木有这个id也就key对应的dialog对象,如果有则取出来,如果没有则new一个

写bug的蚊子的博客 2559

Origin 2025b中文版安装全指南:避开乱码、水印与崩溃陷阱

Origin作为科研绘图领域的事实标准,其2025b版本首次官方支持简体中文UI,但安装远非‘下一步’即可完成。核心在于理解软件本体、语言包、许可证服务与系统区域设置四者间的耦合关系——尤其Windows非Unicode程序语言必须设为‘中文(简体,中国)’,否则必然触发坐标轴乱码、PDF文字方块等典型故障;而AI辅助拟合、内置Python 3.11等新特性,又依赖正确的字体链(如SimSun)与注册表强制加载(UILanguage=zh-CN)才能稳定启用。该版本广泛应用于材料科学、电化学、XRD/SEM

weixin_42548874的博客 1424

dialog.setOnDismissListener(null)过程分析

前提 为解决DialogFragment的内存泄漏,使用了此篇博客的处理方法 DialogFragment 内存泄露,简单说就是给 dialog 设置 getDialog().setOnCancelListener(null); getDialog().setOnDismissListener(null); 但发现了一个问题,当用户返回Activity时,会再次显示对话框!! 之前也有人反馈: ...

jingbin_的博客 4222

工业自动化实战:用LabVIEW的DSC模块实现MODBUS-TCP设备控制

本文详细介绍了如何利用LabVIEW的DSC模块实现工业自动化中的MODBUS-TCP设备控制。通过环境准备、核心功能解析、状态机实现及典型工业场景实战,帮助工程师快速掌握稳定可靠的通讯技术,提升工业自动化系统的运行效率。

salt9的博客 1058

封包(一)(雷电模拟器+ProxyDroid+查尔斯3.93+WPE)

自从换了工作就没有给大家分享一些干活,在加上陪伴自己的孩子没有时间更新文章了,这只能在晚上给大家写文档了,我最近在游戏公司上班,研究封包。我把这些东西都做成了笔记,我想有些东西是大家都想弄明白d ...

寒梅独自开 1万+

关于安卓DialogFragment使用(三)

dialog fragment在使用过程中反复出现

motosheep的博客 1578

TI MSPM0G3507 循迹小车强制寻黑线代码一

一个基于MSPM0微控制器的循迹小车控制系统。系统通过8路循迹传感器检测黑线位置偏差,使用PID算法计算电机控制量。主程序初始化中断、PWM等外设,在按键触发后进入循迹模式。传感器数据处理函数根据检测到的黑线位置返回偏差值(-7到7),PID控制器根据偏差调整左右电机速度。系统还包含限幅处理、中断服务等模块,实现稳定的自动循迹功能。代码结构清晰,展示了嵌入式系统中传感器数据处理、电机控制和PID算法的典型实现方式。

雾削木的优快云博客 1856

Android Dialog

创建对话框 Showing a Dialog 显示对话框 Dismissing a Dialog 解除对话框 Using dismiss listeners 使用解除监听器Creating an AlertDialog 创建警告对话框 Adding buttons 增加按钮 Adding a list 增加列表 Adding checkboxes and rad

书生杂记 3537

SE模块理解+SE-Resnet模块pytorch实现

文章目录SE模块理解SE实现注意力机制原因SE-resnet网络pytorch实现定义residual定义SE模块 SE模块理解 SENet是Squeeze-and-Excitation Networks的简称,拿到了ImageNet2017分类比赛冠军,其效果得到了认可,其提出的SE模块思想简单,易于实现,并且很容易可以加载到现有的网络模型框架中。SENet主要是学习了channel之间的相关性,筛选出了针对通道的注意力,稍微增加了一点计算量,但是效果比较好。 SE模块广泛应用于去噪,去雨方向,利用SE模

qq_42754919的博客 2万+

FFMPEG音频开发: Linux下采集摄像头(使用V4L2框架)数据录制成MP4视频保存到本地

一、环境介绍 操作系统介绍:ubuntu 18.04 FFMPEG版本: 4.4.2 摄像头: USB摄像头、虚拟机挂载本机自带摄像头 二、FFMPEG与X264下载编译 X264下载地址: http://www.videolan.org/developers/x264.html FFMPEG下载地址:https://ffmpeg.org/download.html Yasm ...

8876

安卓dialog的使用+如何自定义dialog

吐槽 哇哇哇,刚写一半win10给我蓝屏了,心塞塞,以后写一点保存一点。回到正题,看到产品给我的设计图,有辣么多的自定义的dialog,发现之前自己只会系统自带的dialog,但是这样根本满足不了产品的需求,所以自己上周好好总结下,然后把产品给的需求完成。//哇哇哇,项目写不完了 什么叫dialog 简单来说就是一句话: 弹出一个窗口,提示用户自己去选择,去提示,去分类的一些内容。 安卓...

sakurakider的博客 6万+

VisionMaster脚本调试(VS)

使用VS调试VisionMaster 脚本

yu_fujiang的专栏 3295

android如何自定义dialog,安卓dialog的使用+如何自定义dialog

什么叫dialog简单来说就是一句话:弹出一个窗口,提示用户自己去选择,去提示,去分类的一些内容。安卓自带的dialog有三种: - AlertDialog—-普通的提示对话框- ProgressDialog–进度条对话- DatePickerDialog/TimePickerDialog–日期对话框/时间对话框所有的对话框,都是直接或间接继承自Dialog类,而AlterDialog直接继承自D...

weixin_28779183的博客 6051

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

安卓Dialog的使用+如何自定义Dialog

什么叫dialog 简单来说就是一句话: 弹出一个窗口,提示用户自己去选择,去提示,去分类的一些内容。 安卓自带的Diaalog有三种: - AlertDialog—-普通的提示对话框 - ProgressDialog–进度条对话 - DatePickerDialog/TimePickerDialog–日期对话框/时间对话框 所有的对话框,都是直接或间接继承自Dialog类,而AlterDialog直接继承自Dialog,其他的几个类均继承自AlterDialog。 系统自带的dialog基本上用A

深度理解是快乐的源泉 6070

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android 安卓自定义Dialog工具类封装与使用,腾讯安卓面试

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2401_84149765的博客 831

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

安卓Android 不依赖于Activity 显示Dialog弹窗

2、此弹窗为仅当不依赖于Activity时,如何弹出AlertDialog,如需弹出更复杂的全局Dialog,需编写一个最定义的Dialog类继承于Dialog,此弹窗的显示方法如下,当想要展示弹窗时,只需要调用此方法:showCameraPrivacyDialog()1、使用自定义布局,首先创建自定义的布局文件,即xml文件,其中各种background可以参考。

m0_54198552的博客 710

安卓Android Dialog的使用

需求:在Dialog不关闭的情况下,切换不同的布局,也就是一级页面、二级页面。2、自定义MusicRecognitionDialog类,继承自Dialog。3、在MainActiviy中显示Dialog。

m0_54198552的博客 320

Android 安卓自定义Dialog工具类封装与使用

文章目录Android 安卓Dialog工具类封装与使用效果图配置JavaKotlin使用方法JavaKotlin Android 安卓Dialog工具类封装与使用 安卓自定义Dialog,分别用了Kotlin和Java两种语言列出!布局可以自定义! 效果图 布局是自定义的 配置 style.xml中配置 <style name="BoxDialog" parent="@android:style/Theme.Holo.Dialog"> <!-- 是否有边框 -->

两行代码 踏踏实实de工作 6012

Android的各种Dialog,你都知道吗?

简单来说就是一个对话框和按钮为特定事件指定了功能:即弹出一个窗口,提示用户自己去选择,去提示,去分类的一些内容。

程序羊的博客 1万+

Android 自定义Dialog

自定义Dialog: public class MyDialog extends Dialog implements View.OnClickListener { private Context context; private int layoutResID;//布局文件id private int[] listenedItem;//监听的控件id Strin...

孙先森的博客 319

Android/安卓 自定义Dialog 最简单、最详细解释

全网最简明的自定义Dialog

Chyumin的博客 1万+

安卓Android Dialog 点击外部消失监听

2、点击弹窗外部不消失,物理返回键消失:setCanceledOnTouchOutside(false);Log.e(TAG, "onCancel: " + "取消识别");3、点击弹窗外部及物理返回键均不消失: setCancelable(false);1、Dialog 默认点击外部/物理返回键会消失。

m0_54198552的博客 560

Android中Dialog的简单使用

实现方法也不是很复杂,一般项目中我们都会通过一个类来管理我们的Activity,即AppManager,所以只要能获取到当前显示的Activity就行了,也就是栈顶的Activity,再封装一个BaseActivity类统一管理,给各个Activity继承,然后需要主页面或者主类(mainactivity)处理Dialog的显示问题,通过管理APP(AppManager)获取到当前栈顶的Activity,用于构造Dialog就行了。/** * Activity管理类 * @author Donkor */

m0_61499908的博客 2650

android 获取dialog的view,Android 原生Dialog实现

1. 简介Dialog 是一个可以展示信息以及和用户交互的小窗体.1.1 Dialog 的组成部分Title 标题部分 : 这部分是可选的,只有当内容区域被使用了才可以使用这里.(并不是强制的)Content 内容区域 : 显示信息的部分,可以使用自定义布局.Action Buttons 交互按钮 : 最多三个按钮.(Positive,Negative, Neutral)1.2 管理Dialog使...

weixin_42349769的博客 2029

android dialog动画_安卓开发之实现全局对话框(不用Dialog方式实现)

前言:最近公司产品做版本更新时,提出了一个新的需求,内容就如标题所述,需要弹出全局的对话框来实现一部分功能。设计图如下请求连麦弹窗其实实现全局对话框的方式有多种:1、通过悬浮窗或者利用悬浮窗权限进行展示。2、有通过写一个BaseActivity然后所有的Activity都继承它在弹出“对话框”的。我再项目中应用的是第二种方式,一开始我觉得这个功能其实挺简单的,拿到设计图和具体功能需求后,...

weixin_40008946的博客 322
上一篇: 在Android应用中定制菜单
下一篇: 访问通话记录CallLog
AndroidTiger
博客等级 码龄17年 282粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值