news 2026/4/17 17:42:15

Android 基础入门教程2.6.0 其他几种常用对话框基本使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android 基础入门教程2.6.0 其他几种常用对话框基本使用

2.6.0 其他几种常用对话框基本使用

分类Android 基础入门教程

本节引言:

上节我们对Dialog的父类:AlertDialog进行了学习,而本节我们来学习下几个常用的 Dialog的基本使用,他们分别是:ProgressDialog(进度条对话框),DatePickerDialog (日期选择对话框)和TimePickerDialog(时间选择对话框)~,话不多说,开始本节内容~


1.ProgressDialog(进度条对话框)的基本使用

我们创建进度条对话框的方式有两种:

  • 1.直接调用ProgressDialog提供的静态方法show()显示
  • 2.创建ProgressDialog,再设置对话框的参数,最后show()出来

代码示例

运行效果图

关键实现代码

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button btn_one; private Button btn_two; private Button btn_three; private ProgressDialog pd1 = null; private ProgressDialog pd2 = null; private final static int MAXVALUE = 100; private int progressStart = 0; private int add = 0; private Context mContext = null; //定义一个用于更新进度的Handler,因为只能由主线程更新界面,所以要用Handler传递信息 final Handler hand = new Handler() { @Override public void handleMessage(Message msg) { //这里的话如果接受到信息码是123 if(msg.what == 123) { //设置进度条的当前值 pd2.setProgress(progressStart); } //如果当前大于或等于进度条的最大值,调用dismiss()方法关闭对话框 if(progressStart >= MAXVALUE) { pd2.dismiss(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = MainActivity.this; bindViews(); } private void bindViews() { btn_one = (Button) findViewById(R.id.btn_one); btn_two = (Button) findViewById(R.id.btn_two); btn_three = (Button) findViewById(R.id.btn_three); btn_one.setOnClickListener(this); btn_two.setOnClickListener(this); btn_three.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_one: //这里的话参数依次为,上下文,标题,内容,是否显示进度,是否可以用取消按钮关闭 ProgressDialog.show(MainActivity.this, "资源加载中", "资源加载中,请稍后...",false,true); break; case R.id.btn_two: pd1 = new ProgressDialog(mContext); //依次设置标题,内容,是否用取消按钮关闭,是否显示进度 pd1.setTitle("软件更新中"); pd1.setMessage("软件正在更新中,请稍后..."); pd1.setCancelable(true); //这里是设置进度条的风格,HORIZONTAL是水平进度条,SPINNER是圆形进度条 pd1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd1.setIndeterminate(true); //调用show()方法将ProgressDialog显示出来 pd1.show(); break; case R.id.btn_three: //初始化属性 progressStart = 0; add = 0; //依次设置一些属性 pd2 = new ProgressDialog(MainActivity.this); pd2.setMax(MAXVALUE); pd2.setTitle("文件读取中"); pd2.setMessage("文件加载中,请稍后..."); //这里设置为不可以通过按取消按钮关闭进度条 pd2.setCancelable(false); pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); //这里设置的是是否显示进度,设为false才是显示的哦! pd2.setIndeterminate(false); pd2.show(); //这里的话新建一个线程,重写run()方法, new Thread() { public void run() { while(progressStart < MAXVALUE) { //这里的算法是决定进度条变化的,可以按需要写 progressStart = 2 * usetime() ; //把信息码发送给handle让更新界面 hand.sendEmptyMessage(123); } } }.start(); break; } } //这里设置一个耗时的方法: private int usetime() { add++; try{ Thread.sleep(100); }catch (InterruptedException e) { e.printStackTrace(); } return add; } }

代码比较简单,而关于Progress的东西我们已经在前面学习过了,这里就不啰嗦了~


2.DatePickerDialog(日期选择对话框)与TimePickerDialog(时间选择对话框)

先要说明一点: Date/TimePickerDialog只是供用户来选择日期时间,对于android系统的系统时间, 日期没有任何影响,google暂时没有公布系统日期时间设置的API, 如果要在app中设置的话,要重新编译android的系统源码,非常麻烦!

他们两个的构造方法非常相似:DatePickerDialog(上下文;DatePickerDialog.OnDateSetListener()监听器;年;月;日)
TimePickerDialog(上下文;TimePickerDialog.OnTimeSetListener()监听器;小时,分钟,是否采用24小时制)

代码示例

运行效果图

关键实现代码

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button btn_date; private Button btn_time; private String result = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bindViews(); } private void bindViews() { btn_date = (Button) findViewById(R.id.btn_date); btn_time = (Button) findViewById(R.id.btn_time); btn_date.setOnClickListener(this); btn_time.setOnClickListener(this); } @Override public void onClick(View v) { result = ""; switch (v.getId()){ case R.id.btn_date: Calendar cale1 = Calendar.getInstance(); new DatePickerDialog(MainActivity.this,new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { //这里获取到的月份需要加上1哦~ result += "你选择的是"+year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日"; Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show(); } } ,cale1.get(Calendar.YEAR) ,cale1.get(Calendar.MONTH) ,cale1.get(Calendar.DAY_OF_MONTH)).show(); break; case R.id.btn_time: Calendar cale2 = Calendar.getInstance(); new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { result = ""; result += "您选择的时间是:"+hourOfDay+"时"+minute+"分"; Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show(); } }, cale2.get(Calendar.HOUR_OF_DAY), cale2.get(Calendar.MINUTE), true).show(); break; } } }

代码同样很简单,就不解释了~


3.代码下载:

DialogDemo.zip

DialogDemo1.zip


本节小结:

好的,本节介绍了三个常用的Dialog,相比起以前的4.x的版本,5.0的这些原生控件, 显然要好看得多~就说这么多,谢谢~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 11:21:52

论文渡劫指南:从选题到答辩的全流程破局之道

凌晨三点的宿舍&#xff0c;屏幕冷光映着发青的脸——这可能是许多毕业季学子最熟悉的场景。从开题报告被导师退回的第三稿&#xff0c;到查重率居高不下的焦虑&#xff0c;再到答辩前夜对着PPT发呆的迷茫&#xff0c;毕业论文这场“学术成人礼”似乎总以折磨人的姿态出现。 据…

作者头像 李华
网站建设 2026/4/15 8:52:03

万字长文!开题报告保姆级攻略,让你的论文赢在起跑线

对于即将毕业的同学来说&#xff0c;写论文最头疼的环节&#xff0c;可能不是正文撰写&#xff0c;而是 开题报告。这一纸报告&#xff0c;看似简单&#xff0c;实则决定了你未来几个月的科研方向、工作量甚至最终的论文质量。很多同学都曾在这里卡壳&#xff0c;反复修改&…

作者头像 李华
网站建设 2026/4/11 0:18:52

*目标检测性能革新:基于可变形自注意力机制的YOLOv11深度优化实战**

文章目录 **目标检测性能革新:基于可变形自注意力机制的YOLOv11深度优化实战** **第一章:解锁新一代视觉Transformer的核心——可变形自注意力** **第二章:从零构建——高效开发环境与数据准备** **第三章:核心技术实现——为YOLOv11注入“智能聚焦”模块** **第四章:模型…

作者头像 李华
网站建设 2026/4/11 3:07:55

无感化签到监测与自动告警系统源码,及时传递安全异常信号

温馨提示&#xff1a;文末有资源获取方式在独居人群日益增多的当下&#xff0c;个人安全已成为备受关注的社会议题。我们为您带来一套专为独居场景设计的轻量化安全工具系统源码&#xff0c;该系统以其简洁高效的设计理念&#xff0c;构建了一套无感化安全防护机制&#xff0c;…

作者头像 李华
网站建设 2026/4/9 11:16:48

LRP6 (Ser1490)如何调控心肌旁分泌以抑制压力超负荷心脏纤维化?

一、压力超负荷如何引发心脏的病理性重构&#xff1f;高血压、心脏瓣膜病等心血管疾病常导致心脏长期承受异常升高的压力负荷&#xff0c;即压力超负荷状态。持续的机械应力刺激会引发一系列心脏适应性及病理性改变&#xff0c;其核心病理进程包括心肌细胞代偿性肥大、持续的炎…

作者头像 李华