当前位置:

首页 > 系统应用 > 2.6.0 其他几种常用对话框基本使用

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

本节引言: 上一节已经把Dialog的父类 AlertDialog 过了一遍,这一节顺着往下看,重点聊几个开发里很常用的 Dialog 基本用法,分别是:ProgressDialog(进度条对话框)、DatePickerDialog(日期选择对话框)和 TimePickerDialog(时间选择对话

本文目录

    本节引言:

    上一节已经把Dialog的父类 AlertDialog 过了一遍,这一节顺着往下看,重点聊几个开发里很常用的 Dialog 基本用法,分别是:ProgressDialog(进度条对话框)、DatePickerDialog(日期选择对话框)和 TimePickerDialog(时间选择对话框)。不绕弯子,直接进入本节内容。

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

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

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

    代码示例:

    运行效果图:

    关键实现代码:

    MainActivity.ja va:

    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 sa vedInstanceState) {
            super.onCreate(sa vedInstanceState);
            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.ja va:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button btn_date;
        private Button btn_time;
        private String result = "";
    @Override
        protected void onCreate(Bundle sa vedInstanceState) {
            super.onCreate(sa vedInstanceState);
            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的这些原生控件, 显然要好看得多~就说这么多,谢谢~

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    系统应用
    相关文章 更多
    Yandex官网入口及最新搜索平台访问方式
    Yandex官网入口及最新搜索平台访问方式

    Yandex搜索平台最新访问入口是https://www.yondex.net/,该网站界面简洁,支持多语言切换和智能提示,具备强大的自然语言处理与多样化内容检索功能,并集成翻译、云存储、邮件等附加服务。

    Yandex搜索引擎官网入口及登录教程
    Yandex搜索引擎官网入口及登录教程

    俄罗斯Yandex搜索引擎创建于1993年,是俄语区主导的搜索服务,官网为https://www.yondex.net/,用户可直接访问并切换语言,无需注册即可使用其搜索、地图、邮箱等集成服务。

    Yandex浏览器官网登录与在线体验入口
    Yandex浏览器官网登录与在线体验入口

    Yandex浏览器官方网站登录入口是https://www.yondex.net/,提供多语言下载、账户同步、广告拦截、Turbo模式及隐私保护等功能,支持跨设备数据同步与安全浏览。

    2026年AO3镜像最新地址及稳定入口
    2026年AO3镜像最新地址及稳定入口

    ao3镜像2026最新入口包括主站archiveofourown.org、镜像站ao3mirror.com和xiaozhan.icu,建议收藏备用并根据网络情况切换使用。

    Win10搜索不到蓝牙耳机的排查与连接方法
    Win10搜索不到蓝牙耳机的排查与连接方法

    面向在Windows 10系统中无法发现蓝牙耳机的用户,本文提供从耳机配对模式到系统设置的完整排查路径。首先确保耳机已充电并进入可被搜索的配对状态,断开与其他设备的连接;随后在Win10设置中开启蓝牙并添加设备。若蓝牙开关缺失或适配器异常,需通过设备管理器检查驱动状态并更新,以恢复正常的蓝牙音频设备识别功能。

    Win10蓝牙耳机麦克风没声音?检查输入设备与权限设置
    Win10蓝牙耳机麦克风没声音?检查输入设备与权限设置

    面向在Windows 10系统中遇到蓝牙耳机能听声但无法录音的用户,本文解决因输入通道选择错误、隐私权限关闭或语音连接缺失导致的麦克风无声问题。关键步骤包括:在系统声音设置中正确选择Headset Microphone或Hands-Free AG Audio作为输入设备;在隐私设置中开启应用访问麦克风权限;确认蓝牙状态包含语音连接而非仅音乐连接,必要时重新配对或更新驱动。注意Stereo模式不支持麦克风输入,勿为音质牺牲通话功能。

    Win11打开服务管理器的两种方法:运行命令与计算机管理
    Win11打开服务管理器的两种方法:运行命令与计算机管理

    面向需要在Windows 11中查看或配置系统服务的用户,本文提供两种快速进入服务管理器的路径。一是通过Win+R运行services.msc直接打开,适合快速访问;二是从开始菜单进入计算机管理,再展开服务和应用程序找到服务列表,适合在统一管理界面中操作。文中说明查看状态通常无需特殊权限,而修改服务设置可能需要管理员账户,帮助用户根据实际需求选择合适入口。

    fences怎么彻底删除 清理残留文件
    fences怎么彻底删除 清理残留文件

    想知道Fences怎么彻底删除?本教程详解Windows 11下卸载Fences、使用官方Purge工具清理残留、删除布局备份及日志的步骤,助您干净移除软件并恢复桌面原生体验。

    Win11打开组策略的命令及家庭版无法使用说明
    Win11打开组策略的命令及家庭版无法使用说明

    面向需要在Windows 11中调整系统设置的用户,介绍通过运行命令gpedit.msc快速打开本地组策略编辑器的方法。该功能仅内置于专业版、企业版和教育版,家庭版通常不包含此工具,运行报错并非系统故障。本文详解正确的命令输入格式、界面确认方式以及通过任务栏搜索的替代路径,并指导家庭版用户如何查看系统版本以选择对应的设置入口或升级方案。

    Win11家庭版找不到组策略编辑器怎么办
    Win11家庭版找不到组策略编辑器怎么办

    面向使用Windows 11家庭版或家庭中文版的用户,解决运行gpedit.msc提示找不到文件的问题。该现象源于版本功能限制,修改文件名或重装同版本系统均无效。本文指导用户先通过“设置-关于”确认系统版本,日常配置优先在“设置”应用中完成;若确需本地组策略功能,建议通过官方渠道升级至专业版,并警示避免使用来源不明的第三方安装工具。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。