android alertdialog 自定义时间,Android开发中常用Dialog(普通弹窗&时间选择器&日历选择器)...

引言

开发中,我们会有很多地方使用 Dialog 来展示一些提示信息或设置信息。如:用户提示、进度展示、时间设置、日期设置等。 下面我和大家一些学习下Android中常用的几种Dialog吧~

**首先,**先介绍下 Dialog 中那些类的关系 先来一波源码

public interface DialogInterface {

......

}

public class Dialog implements DialogInterface

......

public class AlertDialog extends Dialog implements DialogInterface {

......

}

public class ProgressDialog extends AlertDialog {

......

}

public class TimePickerDialog extends AlertDialog implements OnClickListener, OnTimeChangedListener {

......

}

public class DatePickerDialog extends AlertDialog implements OnClickListener, OnDateChangedListener {

......

}

从上述代码中,我们可以看出:

Dialog 类 是一个基类。且源码文档中也给出了说明:

开发中,与:进度、时间、日历 有关的Dialog,继承于AlertDialog。源码文档如下述:

既然明确了继承关系,那么我们就来用代码演示下开发中最基本的使用方式(此处只做一些基本的使用演示,更高级的使用后续再和大家共同学习~)

###普通的对话框 代码演示

//创建一个 AlertDialog.Builder 对象

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

//给对话框添加title

builder.setTitle("普通对话框");

//给对话框添加内容

builder.setMessage("这是一个内容");

//给对话框添加点击事件

builder.setNeutralButton("未知", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Log.e("对话框", "未知 which = " + which);

}

});

builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Log.e("对话框", "取消 which = " + which);

}

});

builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Log.e("对话框", "确定 which = " + which);

}

});

//切记勿忘~开启dialog

builder.show();

效果图(机型不同,展示可能稍有差异,也可以自定义样式)

99f18f28b4cea5c476b0bd9500215421.png

###带单选的对话框 代码演示

//给 AlertDialog 设置单选(四种参数形式)

//Builder setSingleChoiceItems(@ArrayRes int itemsId, int checkedItem, final OnClickListener listener)

//Builder setSingleChoiceItems(Cursor cursor, int checkedItem, String labelColumn, final OnClickListener listener)

//Builder setSingleChoiceItems(ListAdapter adapter, int checkedItem, final OnClickListener listener)

//setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener)

//参数1:所有选项。参数2:默认一个选择。参数3:点击事件监听

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

builder.setTitle("单选对话框");

String[] items = new String[]{"男", "女", "都不是"};

builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {

@Override //which:点击位置

public void onClick(DialogInterface dialog, int which) {

Log.e("对话框", "which = " + which);

}

});

builder.show();

效果图(机型不同,展示可能稍有差异,也可以自定义样式)

3030722a21e7f5b5bfcbd861987ea24f.png

###带多选的对话框 代码演示

//给 AlertDialog 设置多选(三种参数形式)

//Builder setMultiChoiceItems(@ArrayRes int itemsId, boolean[] checkedItems, final OnMultiChoiceClickListener listener)

//Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn, final OnMultiChoiceClickListener listener)

//Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, final OnMultiChoiceClickListener listener)

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

builder.setTitle("多选对话框");

String[] items = new String[]{"西瓜", "葡萄", "香蕉", "苹果", "都要"};

boolean[] checks = new boolean[]{true, false, false, false, false};

builder.setMultiChoiceItems(items, checks, new DialogInterface.OnMultiChoiceClickListener() {

@Override

public void onClick(DialogInterface dialog, int which, boolean isChecked) {

Log.e("对话框", "which = " + which + ", isChecked = " + isChecked);

}

});

builder.show();

效果图(机型不同,展示可能稍有差异,也可以自定义样式)

fab74263d4769bdf6be416c91d49dae4.png

###带进度条的对话框 代码演示

final ProgressDialog progress = new ProgressDialog(this);

progress.setTitle("进度条对话框");

//设置进度条样式(可更改,推荐看源码)

progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

//设置一个最大进度值

progress.setMax(100);

//开启一个线程模拟进度

new Thread(new Runnable() {

@Override

public void run() {

for (int i = 0; i <= 100; i++) {

SystemClock.sleep(100);

progress.setProgress(i);

}

}

}).start();

progress.show();

效果图(机型不同,展示可能稍有差异,也可以自定义样式)

376d3e2108309df3fd5f870ebcedac14.png

###时间选择对话框 代码演示

//TimePickerDialog(Context context, OnTimeSetListener listener, int hourOfDay, int minute, boolean is24HourView)

//TimePickerDialog(Context context, int themeResId, OnTimeSetListener listener, int hourOfDay, int minute, boolean is24HourView)

//themeResId:the resource ID of the theme to apply to this dialog

TimePickerDialog timePicker = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {

@Override

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

Log.e("对话框", "hourOfDay = " + hourOfDay + ", minute = " + minute);

}

}, 0, 0, true);

timePicker.show();

效果图(机型不同,展示可能稍有差异,也可以自定义样式)

b9d4261fb97d50291050c3b7ed935779.png

###日历选择对话框 代码演示

//DatePickerDialog要求Android-API最低版本是24

//DatePickerDialog(Context context)

//DatePickerDialog(Context context, int themeResId)

//DatePickerDialog(Context context, OnDateSetListener listener, int year, int month, int dayOfMonth)

//DatePickerDialog(Context context, int themeResId, OnDateSetListener listener, int year, int monthOfYear, int dayOfMonth)

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {

DatePickerDialog datePicker = new DatePickerDialog(this);

//当我们创建对象的时候,底层源码调用的都是下述的私有构造器

//this(context, 0, null, Calendar.getInstance(), -1, -1, -1)

// private DatePickerDialog(Context context,

// int themeResId, //自定义样式

// OnDateSetListener listener, //监听

// Calendar calendar, //日历类

// int year, //指定年

// int monthOfYear, //指定月

// int dayOfMonth) //指定日

datePicker.show();

}

效果图(机型不同,展示可能稍有差异,也可以自定义样式)

546306c9a62edc368d1d006c240daa2f.png

PS::期待与大家更多的交流~让我们共同进步。技术正在改变着世界!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值