使用了Dialog,Android开发提升一个档次

  • 嘚吧嘚
    • Dialog是什么呢?
    • Dialog的生命周期是啥样子的?
  • Dialog的使用
    • 普通Dialog
    • SingleDialog(单选Dialog)
    • 多选Dialog(MultiDialog)
    • LoadDialog(加载等待的Dialog)
    • DownloadDialog(带有进度条的Dialog)
    • EditDialog(可输入的Dialog)
    • 自定义Dialog
    • DatePickerDialog(日期选择弹窗)
    • TimePickerDialog(时间选择弹窗)
    • 源代码下载

嘚吧嘚

Dialog是什么呢?

dialog直译成中文是“会话,对话”的意思。
那么问题来了,是谁和谁对话呢?enmmmm。。。当然是“人”和“机器”了。
从效果上来看,就是“机器”弹出一个对话的窗口,告诉“人”有哪些选择或者该进行什么操作;然后“人”在窗口进行选择或操作,操作完成之后就完成了“人”和“机器”的一次对话。

以上是通俗的理解,接下来看一下Dialog的Android官方定义

Dialog的Android官方定义:
对话框是提示用户做出决定或输入额外信息的小窗口。对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件。

Dialog的生命周期是啥样子的?

“生命周期”这个名词相信大家并不陌生,最基础也是大家最熟悉的就是Activity的生命周期,如果大家学习过android课程的话,Activity的生命周期是最早学习的内容之一。

Dialog的生命周期:

create -> show -> dismiss

相比于Activity的生命周期也太简单了吧,就是一个有三个步骤的简单流程。

本人对“生命周期”这个词的理解
“生命周期”可以拆分为“生命”、“周”、“期”三部分。所有“生命”都有“起点”和“终点”两个点,即“生”和“死”。而在“生”和“死”之间还有做一些事情,而重复做一些事情形成闭环就是“周”这个字,有点周而复始的意味。而“期”这个字指定是,一条生命从“生”开始,重复做一些事情,最后到“死”的这段时间或者期限。(纯粹是个人理解,如果理解的不正确请指正)

人比其他动物高级在哪里?要是细说的话确实有很多方面,在于人强大的学习能力。
在漫长的进化过程中为了更好的生存下去,不断的学习制造和使用兵器,不断学习更多的知识来认识世界,我认为这也是学习的本质。但后来学习有了更高的境界,通过学习得到一些人生感悟,也就是古人追求的“吾十有五而志于学,三十而立,四十而不惑,五十而知天命,六十而耳顺,七十而从心所欲,不逾矩”。

现在已经很少能感受到古人的学习风气了,说起来也有些伤感。

在理解“生命周期”的过程中有了一丝人生感悟。

个人感悟:
所有生命都有“生”和“死”,但生命的精彩在于“生”和“死”之间做的事情。每个人的选择不一样做的事情也不一样,没有必要非要去做轰天动地的大事,只要活的充实不虚度光阴就不白在这世间走一遭,平凡而又精彩。

Dialog的使用

为什么说学会了Dialog,Android开发提升一个档次?
想象一个场景——退出登录
如果不使用Dialog的效果:

像这样点击“退出登录”就直接退出登录感觉不太友好,为什么这么说呢?再想象一个场景,如果你一不小心碰到了“退出登录”这个按钮就直接退出登录,你再次登录还要输入用户名、密码、验证码等信息,是不是很麻烦呢?现在是不是感觉不太友好了呢?

接下来介绍一下Dialog

普通Dialog

先看效果:

现在是不是感觉比之前的高档了呢?话不多说,接下来学习一下Dialog怎么使用。

layout布局

<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"><Buttonandroid:id="@+id/dialog"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="退出登录" /></LinearLayout>
</LinearLayout>

MainActivity

Button btn = findViewById(R.id.dialog);
btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//通过AlertDialog.Builder实例化一个AlertDialog对象AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);//设置标题builder.setTitle("警告");//设置图标builder.setIcon(R.drawable.csdn);//设置提示信息内容builder.setMessage("确定要退出登录吗?");//确定按钮(标签,监听器)builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {finish();}});//取消按钮(标签,监听器)builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this, "点击了取消", Toast.LENGTH_SHORT).show();}});//忽略按钮(标签,监听器)builder.setNeutralButton("忽略", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this, "点击了忽略", Toast.LENGTH_SHORT).show();}});//显示弹窗builder.create().show();}
});

SingleDialog(单选Dialog)

SingleDialo是列表Dialog的一种,只能选择一个选项。
比较经典的场景就是性别选择,先看一下效果图:

首先在layout布局中加上一个“单选列表”的Button按钮

<Buttonandroid:id="@+id/singleDialog"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="单选列表" />

定义可供选择的性别的列表

final String[] items = {"男", "女", "不告诉你"};

然后构建单选对话框

    private void singleDialog() {choice = 0;//默认选择第一个AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);dialog.setIcon(R.drawable.csdn);//图标dialog.setTitle("性别");/*** 1.items:定义的单选选项数组* 2.checkedItem:默认被选中的选项。默认不选中为-1,选中数组第一个为0,选中数组第二个为1,以此类推* 3.listener:监听器*/dialog.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {choice = which;Toast.makeText(MainActivity.this, "点击了" + items[which], Toast.LENGTH_SHORT).show();}});//交互按钮栏//确定按钮(标签,监听器)dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this, "选择了" + items[choice], Toast.LENGTH_SHORT).show();}});//添加取消按钮dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});dialog.create().show();}

多选Dialog(MultiDialog)

MultiDialog也是列表Dialog的一种,不过是可以多选的列表Dialog。

所有app都有用户完善个人信息的场景,个人信息中有“爱好”这一栏,先看看看看Dialog的效果:

在layout布局中添加一个“多选列表”的按钮

<Buttonandroid:id="@+id/multiDialog"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="多选列表" />

定义可供选择的爱好的列表

final String[] hobby = {"吃", "喝", "玩", "乐", "学习", "睡觉"};

构建多选对话弹窗

        choices = new ArrayList<>();AlertDialog.Builder multiBuilder = new AlertDialog.Builder(MainActivity.this);multiBuilder.setIcon(R.drawable.csdn);multiBuilder.setTitle("爱好");boolean[] checkedItems = {false, true, false, false, false, false};//android会自动根据你选择的改变该数组的值。for (int i = 0; i < checkedItems.length; i++) {if (checkedItems[i] == true) {choices.add(i);}}multiBuilder.setMultiChoiceItems(hobby, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {if (isChecked) {choices.add(which);Toast.makeText(MainActivity.this, "选择了" + hobby[which], Toast.LENGTH_SHORT).show();} else {choices.remove(choices.indexOf(which));Toast.makeText(MainActivity.this, "取消了" + hobby[which], Toast.LENGTH_SHORT).show();}}}).setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String s = "您选择了:";for (Integer item : choices) {s += hobby[item] + "、";}Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();}}).setNeutralButton("再想想", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();Toast.makeText(MainActivity.this, "让我再想想", Toast.LENGTH_LONG).show();}}).show();

LoadDialog(加载等待的Dialog)

加载等待效果:

在layout布局中添加“加载弹窗”的按钮

<Buttonandroid:id="@+id/loadDialog"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="加载弹窗" />

构建加载对话框

ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setIcon(R.drawable.csdn);
progressDialog.setMessage("加载中......");
//是否形成一个加载动画  true表示不明确加载进度形成转圈动画  false表示明确加载进度
progressDialog.setIndeterminate(true);
//点击返回键或者dialog四周是否关闭dialog  true表示可以关闭   false表示不可关闭
progressDialog.setCancelable(true);
progressDialog.show();

DownloadDialog(带有进度条的Dialog)

带有进度加载的对话弹窗,一般常见于下载任务
效果:

在layout布局中添加一个“下载弹窗”的按钮

<Buttonandroid:id="@+id/downloadDialog"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="下载弹窗" />

构建下载对话弹框

        final int MAX_VALUE = 100;final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);progressDialog.setProgress(0);progressDialog.setTitle("文件下载中......");progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);progressDialog.setMax(MAX_VALUE);progressDialog.show();new Thread(new Runnable() {@Overridepublic void run() {int progress = 0;while (progress < MAX_VALUE) {try {Thread.sleep(100);progress++;progressDialog.setProgress(progress);} catch (InterruptedException e) {e.printStackTrace();}}//加载完毕自动关闭dialogprogressDialog.cancel();}}).start();

EditDialog(可输入的Dialog)

EditDialog是可以编辑的对话弹框


在layout布局中添加一个“个性签名”的按钮

<Buttonandroid:id="@+id/editDialog"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="个性签名" />

构建可编辑的对话框

final EditText editText = new EditText(MainActivity.this);
AlertDialog.Builder inputDialog = new AlertDialog.Builder(MainActivity.this);
inputDialog.setTitle("请输入个性签名").setView(editText);
inputDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this, "您的个性签名为:" + editText.getText().toString(), Toast.LENGTH_SHORT).show();}
}).setNeutralButton("让我再想想", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}
}).show();

自定义Dialog

可以根据自己的功能需要自定义Dialog,就以调差问卷为例来学习一下吧。
先看效果:

自己定义的页面布局questionnaire.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:text="你的名字:"android:textColor="#111"android:textSize="24dp"></TextView><EditTextandroid:layout_width="match_parent"android:layout_height="match_parent"android:inputType="text" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:text="你的手机:"android:textColor="#111"android:textSize="24dp"></TextView><EditTextandroid:layout_width="match_parent"android:layout_height="match_parent"android:inputType="phone" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:text="你的意见:"android:textColor="#111"android:textSize="24dp"></TextView><EditTextandroid:layout_width="match_parent"android:layout_height="match_parent"android:inputType="text" /></LinearLayout></LinearLayout>

构建自定义的调查问卷对话框

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this).setView(R.layout.questionnaire);
builder.setTitle("调查问卷");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this, "感谢你们完成了调查问卷", Toast.LENGTH_SHORT).show();}
}).setNeutralButton("退出", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this, "真遗憾", Toast.LENGTH_SHORT).show();}
}).show();

DatePickerDialog(日期选择弹窗)


在layout布局中添加新按钮

<Buttonandroid:id="@+id/birth"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="设置生日" />

构建日期选择会话弹窗

//获取当前系统时间
Calendar calendar = Calendar.getInstance();
// 获取当前的年
int year = calendar.get(calendar.YEAR);
// 获取当前的月
int month = calendar.get(calendar.MONTH);
// 获取当前月的第几天
final int day = calendar.get(calendar.DAY_OF_MONTH);DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {birth.setText(year + "年" + (month + 1) + "月" + day + "日");}
}, year, month, day);datePickerDialog.show();

TimePickerDialog(时间选择弹窗)


在layout布局中添加新按钮

<Buttonandroid:id="@+id/time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="设置时间" />

构建时间选择会话弹窗

//获取当前系统时间
Calendar calendar = Calendar.getInstance();
// 获取当前的小时
int hour = calendar.get(calendar.HOUR);
// 获取当前的分钟
int minute = calendar.get(calendar.MINUTE);TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {time.setText(hourOfDay + " : " + minute);}
}, hour, minute, true);timePickerDialog.show();

源代码下载

Dialog的代码有需要的自行下载一下:Github代码下载

使用了Dialog,Android开发提升一个档次相关推荐

  1. 弄清模块化、组件化、插件化的区别,业务开发提升一个档次

    上次,我们讲了MVC.MVP.MVVM,其实从狭义上来讲,Android的架构概念就在这儿,无论怎么变,都是加加减减一些边边角角的东西,不足在意. 从本篇开始,打算从广义上探究一下移动架构的思想:包括 ...

  2. 使用java9的uuid生成方式,让uuid生成速度提升一个档次

    使用 java9 的 uuid 生成方式,让你的 uuid 生成速度提升一个档次. 简介 UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定. ...

  3. Android开发提升效率之DataBinding——双向绑定

    DataBingding Android开发提升效率之DataBinding--基本使用 Android开发提升效率之DataBinding--进阶开发 Android开发提升效率之DataBindi ...

  4. Mac Android开发提升效率的工具、插件、心得集锦(gif动画演示)

    首先附上思维导图,之后我的文章大部分都会附上思维导图,感觉思维导图不仅能帮助我梳理文章思路,也能起到个目录作用.图片比较多,加载时间可能会长点. 首先是Android studio插件 1.Butte ...

  5. 2016 校招, Android 开发,一个本科应届的坎坷求职之路(转)

    转载出处:http://www.nowcoder.com/discuss/3244?type=2&order=0&pos=1&page=1 和大多数的面经不同,我不是大牛,手头 ...

  6. Android开发——实现一个拨号器(一)

    安卓开发教程:[天哥]Android开发视频教程最新版 Android Studio开发_哔哩哔哩_bilibili 开发平台:Android Stdio(和idea里面自带的一模一样,直接分开用An ...

  7. Android开发实战---一个汽车销售APP,有汽车列表页、汽车详情页、贷款计算页3个界面。

    Android开发实战设计并实现一个汽车销售APP,要求至少有汽车列表页.汽车详情页.贷款计算页3个界面. 已开源:https://github.com/yan123666/wlf 实现结果: 1.计 ...

  8. Android开发做一个简单的音乐播放器

    Android开发如何做一个简单的音乐播放器,首先我们先要知道用到的知识点有哪些. 1.MediaPlayer:可以播放本地资源.sd卡内存资源以及网络uri资源,在这里我们播放sd卡上的音乐资源. ...

  9. Android辅助服务监听dialog,Android开发中对话框辅助类——DialogHelper

    写在前面: 对话框在平时的开发工作中使用率很频繁,但是很多开发者每次使用都去写一堆代码,如此,不单单效率不高,而且代码也不优...为此,写了简单的封装. 效果如: 关键类DialogHelper.ja ...

最新文章

  1. PHP Session有效期的相关问题
  2. redis实现分布式锁——核心 setx+pipe watch监控key变化-事务
  3. 推荐系统炼丹笔记:阿里推荐算法特征交叉新方式CAN
  4. Hitv8 文件批量重命名工具
  5. pycharm使用心得
  6. Centos7 安装python3.7.0
  7. javascript时间函数
  8. 数据预处理第7讲:具有离群点数据的缩放方法比较
  9. 别用Date了,Java8新特性之日期处理,现在学会也不迟!
  10. 计算机桌面快捷方式误删了,电脑把桌面快捷方式删除了怎么办?电脑快捷方式删除了的恢复方法...
  11. MySQL随机排序的正确姿势
  12. ec6108v9a精简刷机包_华为悦盒无安装限制固件下载|华为悦盒EC6108V9A第三方精简流畅无安装限制固件 下载 - 巴士下载站...
  13. ENVI/ArcGIS根据坐标位置提取影像DN值(批量)
  14. C++ CEF3加载高清图片崩溃
  15. hdu5651 xiaoxin juju needs help(组合数学)
  16. phpqrcode简单在线二维码生成工具源码 非第三方接口
  17. on device trainning
  18. uni-app 快手小程序如何设置跟元素样式
  19. fNIRS功能近红外数据处理服务
  20. 计算机基础应用资料,计算机应用基础复习资料(带答案).doc

热门文章

  1. 基于深度学习的口罩检测系统(Python+清新界面+数据集)
  2. wxwidget编译安装_wxWidgets编译简介
  3. python——网络爬虫快速入门【reuqests篇】
  4. 如何在MSN 7.0中显示Winamp或Foorbar中正在播放的曲目名称
  5. AC 启用域服务器上网认证,突然出现密码认证失败,提示“用户未启用本地密码”
  6. 12306网站性能分析(转)
  7. Word怎么添加乘号?
  8. 腾讯会议 程序的传入参数
  9. 整站SEO优化需要怎么做?SEO整站优化的思路及步骤
  10. 一看就懂,关于PID控制中yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;的理解