Android 之 Dialog
一、简介
对话框的功能主要就是提示一些信息给用户,让用户可进行下一步操作,或者提示用户该操作不可逆等等。
然而对话框本身的时候不复杂,复杂在于和其他控件结合起来使用。
下面介绍会介绍几种常用的对话框。
二、属性和方法
Android系统提供的对话框父类为Dialog, 里面并没有实现对话框的具体类型,比如单选、多选、列表等对话框,仅提供一个框架和规范。系统为开发者提供了一个 多功能的对话框类AlertDialog, 封装了各种对话框的样式,我们只需要完成要显示的内容和监听。
? 大部分对话框就是使用系统封装好的对话框AlertDialog的实例对象。AlertDialog并不提供对外的构造方法,即不能直接通过AlertDialog的构造函数来生产一个AlertDialog。因为AlertDialog所有的构造方法都是protected的。所以为了获取AlertDialog对象,系统提供了一个静态内部类Builder让我们使用,通过Builder可以创建AlertDialog对象。
Builder对象设置对话框的属性
.setTitle() //设置标题
.setIcon ()//设置图标
.setMessage ()//设置要显示的内容
.setItems//设置在对话框中显示的项目列表
.setView//设置自定义的对话框样式
.setPositiveButton ()//设置确定按钮
.setNegativeButton ()//设置取消按钮
.setNeutralButton ()//设置中立按钮
.setSingleChoiceItems//单选框
.setMultiChoiceItems//复选框
三、各种Dialog的使用
对话框的在安卓中的使用可谓无处不在,使用非常的广泛,一个好的对话框能提高用户的使用感。这在安卓开发中是非常重要的。
本章节会介绍以下这些常见的对话框的使用。
文章图片
使用步骤:
- 创建AlertDialog.Builder实例对象。
- 通过Builder对象设置对话框的属性。
- 调用Builder对象的create()方法创建AlertDialog对话框
- 调用AlertDialog的show()方法来显示对话框
- 调用AlertDialog的dimiss()方法销毁对话框。
如图效果:
文章图片
java核心代码:
AlertDialog dialog=new AlertDialog.Builder(this)
.setIcon(R.drawable.hmbb)//设置图标
.setTitle("我是普通的对话框")//设置标题
.setMessage("我是内容")//设置要显示的内容
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "点击了取消按钮", Toast.LENGTH_SHORT).show();
dialogInterface.dismiss();
//销毁对话框
}
})
.setNeutralButton("第三方按钮", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "我是第三个按钮", Toast.LENGTH_SHORT).show();
}
})
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "点击了确定的按钮", Toast.LENGTH_SHORT).show();
dialog.dismiss();
//销毁对话框
}
}).create();
//create()方法创建对话框
dialog.show();
//显示对话框
2、列表对话框 【最全的 Android 之 Dialog】如图效果:
文章图片
java核心代码:
final String hobby[] = {"吃饭", "睡觉", "敲代码", "看电视","打游戏"};
AlertDialog dialog1=new AlertDialog.Builder(this)
.setIcon(R.drawable.hmbb)
.setTitle("请选出你最喜欢的爱好")
.setItems(hobby, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, hobby[i], Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create();
dialog1.show();
3、单选对话框 效果如图:
文章图片
核心java代码:
final String[] gaame = new String[]{"王者荣耀", "LOL", "QQ飞车", "地下城","阴阳师"};
AlertDialog dialog2=new AlertDialog.Builder(this)
.setIcon(R.drawable.game)
.setTitle("请选择你最喜欢的游戏")
//第一个参数:设置单选的资源;
第二个参数:设置默认选中哪几项
.setSingleChoiceItems(gaame, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
Toast.makeText(MainActivity.this, gaame[i], Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create();
dialog2.show();
4、多选对话框 效果如图:
文章图片
核心java代码:
final String items[] = {"篮球", "足球", "排球", "乒乓球","羽毛球","跑步"};
final boolean checkedItems[] = {true, false, false, false,true,true};
AlertDialog dialog3 = new AlertDialog.Builder(this)
.setIcon(R.drawable.hmbb)//设置标题的图片
.setTitle("选择你喜欢的运动")//设置对话框的标题
//第一个参数:设置单选的资源;
第二个参数:设置默认选中哪几项
.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int i, boolean isChecked) {
checkedItems[i] = isChecked;
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
for (int i = 0;
i < checkedItems.length;
i++) {
if (checkedItems[i]) {
Toast.makeText(MainActivity.this, "选中了" + i, Toast.LENGTH_SHORT).show();
}
}
dialog.dismiss();
}}).create();
dialog3.show();
5、进度条对话框 ProgressDialog 也是继承于Dialog,但其扩展了缓冲加载提示的功能。
效果如图:
文章图片
java核心代码:
//实例化一个ProgressDialog进度条对话框对象
final ProgressDialog progressDialog=new ProgressDialog(this);
//设置进度条为水平样式
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMessage("加载中");
progressDialog.setMax(100);
final Timer timer=new Timer();
timer.schedule(new TimerTask() {
int startprogress=0;
@Override
public void run() {
startprogress+=new Random().nextInt(10);
progressDialog.setProgress(startprogress);
if (startprogress>100)
timer.cancel();
}
},0,1000);
progressDialog.show();
break;
如果要是实现旋转的进度条的话
文章图片
java核心代码:
ProgressDialog progressDialog1 = new ProgressDialog(this);
progressDialog1.setMessage("正在加载中");
progressDialog1.show();
6、日期选择对话框 效果如图:
文章图片
java核心代码:
Calendar data=https://www.it610.com/article/Calendar.getInstance();
DatePickerDialog dpd=new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
String str;
str = String.valueOf(year) +"-" + String.valueOf(month) + "-" + String.valueOf(day);
Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show();
}},data.get(Calendar.YEAR),data.get(Calendar.MONTH),data.get(Calendar.DAY_OF_MONTH));
dpd.show();
7、时间选择对话框 效果如图:
文章图片
java核心代码:
Calendar calendar=Calendar.getInstance();
new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {}
},
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
true
).show();
8、自定义对话框 自定义对话框主要是使用这个
.setView(view)
方法,加载一个我们自定义的布局。效果如下:
文章图片
首先我们需要将系统Dialog默认的样式去掉,避免影响我们的样式布局
在res->values->style.xml文件中添加我们去除系统对话框的样式
- @android:color/transparent
- @null
- true
- true
- false
- @null
- true
编写自定义对话框div_dialog.xml的布局代码
java核心代码:
//实例化Dialog对象,并应用NormalDialogStyle去掉系统样式
Dialog dialog4 = new Dialog(this,R.style.NormalDialogStyle);
View view = View.inflate(this, R.layout.div_dialog, null);
dialog4.setContentView(view);
//给dialog设置一个视图
dialog4.setCanceledOnTouchOutside(true);
//在点击窗口外的地方可以退出
Window dialogWindow = dialog4.getWindow();
//获取Dialog的窗口
//实例化窗口布局对象
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width =WindowManager.LayoutParams.MATCH_PARENT;
//宽度铺满
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
//高度自适应
lp.gravity = Gravity.BOTTOM;
//窗口停靠在底部居中
dialogWindow.setAttributes(lp);
dialog4.show();
常用的对话框都介绍的差不多了。:.?ヽ(?????)??.:?+?
点个赞再走吧?(?′0`?)?。奥里给!
推荐阅读
- Android|简直离谱!字节面了5轮,4轮都让我分析 Android Framework 层的源码
- 常见问题|Android studio R8 编译报错
- 程序员|快点来白嫖!15个经典面试问题及回答思路,跳槽薪资翻倍
- 手把手教您快速运行Unity华为游戏(GameService)
- 芯片|支持 RISC-V 芯片的 Android 系统来了!
- 程序员|apk开发语言!GitHub上标星13k的《Android面试突击版》,成功拿下大厂offer
- 程序员|android面试!在字节跳动我是如何当面试官的,含泪整理面经
- 程序员|android面试题2019!一线互联网移动架构师筑基必备技能之Java篇,聪明人已经收藏了!
- Android学习|Android学习记录(十四)