您好!欢迎来到源码码网

Android对话框控件AlertDialog和ProgressDialog使用

  • 源码教程
  • 来源:源码码网
  • 编辑:admin
  • 时间:2021-01-12 21:06
  • 阅读:678

对话框是人机交互过程中十分常见的组件,一般用于在特定条件下对用户显示一些信息,可以增强应用的友好性。

Dialog 类是对话框的基类。对话框虽然可以在界面上显示,但是 Dialog 不是 View 类的子类,而是直接继承自 java.lang.Object 类。

Dialog 对象也有自己的生命周期,其生命周期由创建它的 Activity 进行管理。

Activity 可以调用 showDialog(int id) 将不同 ID 的对话框显示出来,也可以调用 dismissDialog(int id)方法将 ID 标识的对话框从用户界面中关闭掉。

当 Activity 调用了 showDialog(ID)方法,对应 ID 的对话框没有被创建时,
Android 系统会回调 OnCreateDialog(ID) 方法来创建具有该 ID 的对话框。

在 Activity 中创建的对话框都会被 Activity 保存,下次 showDialog(ID) 方法被调用时,若该 ID 的对话框已经被创建,则系统不会再次调用 OnCreateDialog(ID) 方法创建该对话框,而是会回调 onPrepareDialog(int id, Dialog dialog) 方法,该方法允许对话框在被显示之前做一些修改。

常用的对话框有 AlertDialog 和 ProgressDialog,下面将通过实例讲解这两种对话框的使用方法。

AlertDialog

AlertDialog 对话框是十分常用的用于显示信息的方式,最多可提供三个按钮。

AlertDialog 不能直接通过构造方法构建,而要由 AlertDialog.Builder 类来创建。

AlertDialog 对话框的标题、按钮以及按钮要响应的事件也由 AlertDialog.Builder 设置。

在使用 AlertDialog. Builder 创建对话框时常用的几个方法如下:

名称作用
setTitle()设置对话框中的标题
setIcon()设置对话框中的图标
setMessage()设置对话框的提示信息
setPositiveButton()为对话框添加yes按钮
setNegativeButton()为对话框添加no按钮
setNeutralButton()为对话框添加第三个按钮


下面通过实例来学习创建 AlertDialog 的方法。

创建 Android 工程 DialogDemo,并在 main.xml 中添加两个按钮,分别为 AlertDialog 和 ProcessDialog。

其 main.xml 代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>

  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  3. android:layout_width="fill_parent"

  4. android:layout_height="fill_parent"

  5. android:orientation="vertical">


  6. <TextView

  7. android:layout_width="fill_parent"

  8. android:layout_height="wrap_content"

  9. android:text="Dialog演示" />


  10. <Button

  11. android:id="@+id/button1"

  12. android:layout_width="match_parent"

  13. android:layout_height="wrap_content"

  14. android:text="AlertDialog" />


  15. <Button

  16.     android:id="@+id/button2"

  17.     android:layout_width="match_parent"

  18.     android:layout_height="wrap_content"

  19.     android:text="ProgressDialog" />

  20. </LinearLayout>


其运行效果如图 1 所示。

AlertDialog的运行效果

图 1  AlertDialog的运行效果

处理 AlertDialog 按钮单击事件的代码为:

  1. btn = (Button) findViewById(R.id.button1);

  2. btn.setOnClickListener(new View.OnClickListener() {

  3. @Override

  4. public void onClick(View v) {

  5. showDialog(Alert_DLG);

  6. }

  7. });

单击 AlertDialog 按钮,调用 showDialog(ALERT_DLG),系统回调 onCreateDialog(int id) 方法,创建并弹出 AlertDialog 对话框,如图 2 所示。

单击AlertDialog按钮的效果

图 2  单击AlertDialog按钮的效果

相关代码为:

  1. protected Dialog onCreateDialog(int id) {

  2. // TODO Auto-generated method stub

  3. Dialog dialog = null;

  4. switch (id) {

  5. case ALERT_DLG:

  6. AlertDialog.Builder builder = new AlertDialog.Builder(DialogDemoActivity.this);

  7. builder.setIcon(android.R.drawable.ic_dialog_info);

  8. builder.setTitle("AlertDialog");

  9. builder.setMessage("这是一个AlertDialog");

  10. builder.setPositiveButton("Positive", new DialogInterface.OnClickListener() {

  11. @Override

  12. public void onClick(DialogInterface dialog, int which) {

  13. // TODO Auto-generated method stub

  14. Log.i("DialogDemo", "OK ! ");

  15. }

  16. });

  17. builder.setNegativeButton("Negative", new DialogInterface.OnClickListener() {

  18. @Override

  19. public void onClick(DialogInterface dialog, int which) {

  20. // TODO Auto-generated method stub

  21. Log.i("DialogDemo", "Cancel按钮被单击! ");

  22. }

  23. });


  24. builder.setNeutralButton("Neutral", new DialogInterface.OnClickListener() {

  25. @Override

  26. public void onClick(DialogInterface dialog, int which) {

  27. // TODO Auto-generated method stub

  28. Log.i("DialogDemo", "Neutral按钮被单击!");

  29. }

  30. });

  31. dialog = builder.create();

  32. break;

  33. default:

  34. break;

  35. }

  36. return dialog;

  37. }

onCreateDialog() 方法中创建了带有三个按钮的 AlertDialog,并且为每个按钮添加了事件处理方法,以便获知用户单击了哪个按钮。

ProgressDialog

ProgressDialog 是一个带有进度条的对话框,当应用程序在完成比较耗时的工作时,使用该对话框可以为用户提供一个总进度上的提示。

为 main.xml 布局中的 ProgressDialog 按钮添加事件处理代码:

  1. Button progressbtn = (Button)findViewById(R.id.button2);

  2. progressbtn.setOnClickListener(new View.OnClickListener() {

  3. @Override

  4. public void onClick(View view) {

  5. showDialog(PROGRESS_DLG);

  6. }

  7. });

单击 ProgressDialog 按钮,调用 showDialog(PROGRESS_DLG) ,系统回调 onCreateDialog(int id) 方法,创建并弹出 ProgressDialog 对话框,如图 3 所示。

单击ProgressDialog按钮的效果

图 3  单击ProgressDialog按钮的效果

onCreateDialog() 方法中的相关代码如下:

  1. case PROGRESS_DLG:

  2. final ProgressDialog progressDialog;

  3. progressDialog = new ProgressDialog(this);

  4. //设置水平进度条

  5. progressDialog.setProgressStyle(progressDialog.STYLE_HORIZONTAL);

  6. //设置进度条最大值为100

  7. progressDialog.setMax(100);

  8. //设置进度条当前值为0

  9. progressDialog.setProgress(0);

  10. dialog = progressDialog;

  11. new Thread(new Runnable() {

  12. int count = 0;


  13. @Override

  14. public void run() {

  15. // TODO Auto-generated method stub

  16. while (progressDialog.getProgress() < 100) {

  17. count += 3;

  18. progressDialog.setProgress(count);

  19. try {

  20. Thread.sleep(1000);

  21. } catch (InterruptedException e) {

  22. // TODO Auto-generated catch block

  23. e.printStackTrace();

  24. }

  25. }

  26. }

  27. }).start();

  28. break;

特别声明:
1、如无特殊说明,内容均为本站原创发布,转载请注明出处;
2、部分转载文章已注明出处,转载目的为学习和交流,如有侵犯,请联系客服删除;
3、编辑非《源码码网》的文章均由用户编辑发布,不代表本站立场,如涉及侵犯,请联系删除;
全部评论(0)
推荐阅读
  • 陀螺匠OA办公系统源码 PHP + Vue 前后端分离 完整可商用
  • 陀螺匠OA办公系统源码 PHP + Vue 前后端分离 完整可商用
  • 项目介绍《陀螺匠》是一套采用Laravel9框架结合Swoole高性能框架与Vue.js前端技术栈构建的AI+低代码双引擎智能办公系统。陀螺匠深度融合了AI智能体以及低代码开发平台,系统简约,易于功能扩展,方便二次开发。旨在为企业提供一站式、数智化转型的全方位解决方案,助力企业高效运营与智能决策。源码说明源码说明:项目代码100%开源,基于AGPL-3.0,支持免费商用!技术栈:系统基于Laravel9+Swoole+Vue.
  • 软件教程
  • 来源:CRMEB
  • 编辑:CRMEB
  • 时间:2026-03-27 15:33
  • 阅读:393
  • open claw最近很火,如何理性看待?
  • open claw最近很火,如何理性看待?
  • openclaw是2026年初科技圈最火爆的现象级话题。它不仅仅是又一个AI产品,更被百川智能的王小川誉为与ChatGPT诞生同等重要的里程碑——标志着AI从”只会说”的对话者,进化到了”能够做”的行动者。对于这股全民”养虾”热潮,我的观察是:它代表了一次人机关系的革命性跃迁,但同时也是一场充满风险与泡沫的狂欢,其真正的价值需要在喧嚣褪去、安全与成本的挑战被克服后才能显现。下
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-03-17 11:06
  • 阅读:435
  • 原生小程序和封装的小程序有什么区别
  • 原生小程序和封装的小程序有什么区别
  • 原生小程序和封装的小程序是两种不同的开发模式,主要区别在于开发方式、性能表现、代码维护以及跨平台能力。为了让你更清晰地理解,我们可以把“原生”比作用钢筋水泥直接盖楼,而“封装”则是用预制板或套件来组装楼。以下是详细的对比分析:1.定义与本质原生小程序:定义: 直接使用微信官方提供的开发工具、语法和API进行开发。语言: 使用微信自己定义的一套技术栈(WXML(微信标记语言)做结构、WXSS(微信样式表)做样式、JS
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-03-06 11:54
  • 阅读:669
  • 基于NetCore(Razor Page)开发的Cms建站系统MIT协议
  • 基于NetCore(Razor Page)开发的Cms建站系统MIT协议
  • FytSoaCms一款基于NetCore2.2/3.1(RazorPage)功能强大的Cms建站系统,支持前后端分离。简介:模块化:全新的架构和模块化的开发机制,便于灵活扩展和二次开发。模型/栏目/分类信息体系:通过栏目和模型绑定,以及不同的模型类型,不同栏目可以实现差异化的功能,轻松实现诸如资讯、下载、讨论和图片等功能。通过分类信息和栏目绑定,可以自动建立索引表,轻松实现复杂的信息检索。FytSoa是一套基于NetCore+SqlS
  • 开发工具
  • 来源:gitee
  • 编辑:源码码网
  • 时间:2026-01-24 22:21
  • 阅读:596
  • 基于JAVA开发的企业级平台微信公众号管理系统SmartWx
  • 基于JAVA开发的企业级平台微信公众号管理系统SmartWx
  • SmartWx微信公众号管理系统是一个完整的微信公众号web操作版,直接编译即可运行。让用户不再用关心微信的底层接口,直接使用页面进行操作,简单方便。包括服务器绑定、文本管理、图文管理、菜单管理、粉丝管理、群发消息等。技术框架开发语言:JAVA数据库:MYSQLJAVA开发框架:SpringMVC+Spring+Mybatis缓存框架:j2cache前端开发框架:Layui+JQuery+html前台模板引擎:art-templat
  • 源码教程
  • 来源:gitee
  • 编辑:源码码网
  • 时间:2026-01-24 21:53
  • 阅读:602
联系客服
源码代售 源码咨询 技术开发 联系客服
029-84538663
手机版

扫一扫进手机版
返回顶部