一起学Android之Dialog
程序员文章站
2022-08-31 12:26:02
对话框(Dialog)是一个在Android系统开发中经常会用到的小窗口,它提示用户做决定或者输入一些东西,对话框并不填充屏幕,是一个模态(Modal)窗口。Dialog类是所有对话框的基类,应避免直接实例化对话框,通常使用它的子类(AlertDialog,DatePickerDialog or T... ......
概述
对话框(dialog)是一个小窗口,在android系统开发中经常会用到,它提示用户做决定或者输入一些东西,对话框并不填充屏幕,是一个模态(modal)窗口。dialog类是所有对话框的基类,应避免直接实例化对话框,通常使用它的子类(alertdialog,datepickerdialog or timepickerdialog),本文主要讲解的是alertdialog。
什么是alertdialog?
可以显示标题、最多三个按钮、可供选择的项目列表或自定义布局的对话框。
创建步骤
- 构建一个builder(alertdialog.builder)。
- 设置对话框标题(settitle),内容信息(setmessage)。
- 设置对话框显示的按钮,最多三个按钮(setpositivebutton,setnegativebutton)。
- 调用方法,创建对话框对象(create)。
- 显示对话框(show)。
涉及知识点
- alertdialog.builder 对话框构造器,可以进行对话框进行设置,并创建对话框对象。
- settitle 设置对话框标题,setmessage设置对话框显示的文本内容
- setnegativebutton 设置对话框显示的否定按钮(cancel), setpositivebutton设置对话框显示的肯定按钮(ok)
- show() 显示对话框
- setitems 设置对话框的列表内容
- setsinglechoiceitems 设置单选按钮的列表项,setmultichoiceitems设置多选按钮的列表项
- setview 设置自定义视图的对话框
默认对话框
如下图所示(显示了标题,内容,两个按钮):
关键代码如下:
1 /** 2 * 默认对话框事件响应方法 3 * 4 * @param v 5 */ 6 public void showdefaultdialog(view v) { 7 //创建一个builder 8 alertdialog.builder builder = new alertdialog.builder(this); 9 //设置对话框标题 10 builder.settitle("提示"); 11 //设置对话框内容 12 builder.setmessage("这是一个对话框的提示"); 13 //积极按钮? 14 builder.setpositivebutton("ok", new dialoginterface.onclicklistener() { 15 @override 16 public void onclick(dialoginterface dialog, int which) { 17 toast.maketext(mainactivity.this, "你选择了ok", toast.length_short).show(); 18 } 19 }); 20 //消极按钮 21 builder.setnegativebutton("cancel", new dialoginterface.onclicklistener() { 22 @override 23 public void onclick(dialoginterface dialog, int which) { 24 toast.maketext(mainactivity.this, "你选择了cancel", toast.length_short).show(); 25 } 26 }); 27 //创建一个对话框 28 alertdialog dialog = builder.create(); 29 //显示一个对话框 30 dialog.show(); 31 }
列表对话框
如下图所示(弹出的对话框内容展示为一个列表)用户通过列表进行选择
关键代码如下:
1 /** 2 * 列表对话框响应事件 3 * 4 * @param v 5 */ 6 public void showlistdialog(view v) { 7 //构件一个对话框builder 8 alertdialog.builder builder = new alertdialog.builder(this); 9 //设置标题 10 builder.settitle(r.string.pick_color); 11 //将资源文件转化为数组对象 12 arr_colors = getresources().getstringarray(r.array.arr_colors); 13 //设置列表内容和点击事件 14 builder.setitems(r.array.arr_colors, new dialoginterface.onclicklistener() { 15 @override 16 public void onclick(dialoginterface dialog, int which) { 17 toast.maketext(mainactivity.this, "你选择了[" + arr_colors[which] + "]", toast.length_short).show(); 18 } 19 }); 20 //创建一个对话框 21 alertdialog dialog = builder.create(); 22 //显示一个对话框 23 dialog.show(); 24 }
单选按钮对话框
如下图所示(用户通过单选按钮进行选择):
关键代码如下:
1 /** 2 * 单选框对话框按钮事件 3 * 4 * @param v 5 */ 6 public void showsingledialog(view v) { 7 //构件一个对话框builder 8 alertdialog.builder builder = new alertdialog.builder(this); 9 //设置标题 10 builder.settitle(r.string.pick_color); 11 //将资源文件转化为数组对象 12 arr_colors = getresources().getstringarray(r.array.arr_colors); 13 checkeditems=new int[arr_colors.length]; 14 //设置列表内容和点击事件,第二个参数checkeditem表示默认选中项 15 builder.setsinglechoiceitems(r.array.arr_colors, 0, new dialoginterface.onclicklistener() { 16 @override 17 public void onclick(dialoginterface dialog, int which) { 18 for(int i=0;i<checkeditems.length;i++){ 19 if(i==which){ 20 checkeditems[i]=1; 21 }else{ 22 checkeditems[i]=0; 23 } 24 } 25 toast.maketext(mainactivity.this, "你选择了[" + arr_colors[which] + "]", toast.length_short).show(); 26 } 27 }); 28 //积极按钮? 29 builder.setpositivebutton("ok", new dialoginterface.onclicklistener() { 30 @override 31 public void onclick(dialoginterface dialog, int which) { 32 toast.maketext(mainactivity.this, "你选择了ok"+getcheckeditems(), toast.length_short).show(); 33 } 34 }); 35 //消极按钮 36 builder.setnegativebutton("cancel", new dialoginterface.onclicklistener() { 37 @override 38 public void onclick(dialoginterface dialog, int which) { 39 toast.maketext(mainactivity.this, "你选择了cancel"+getcheckeditems(), toast.length_short).show(); 40 } 41 }); 42 //创建一个对话框 43 alertdialog dialog = builder.create(); 44 //显示一个对话框 45 dialog.show(); 46 }
复选框对话框
如下图所示(对话框的内容可以进行多选):
关键代码如下:
1 /** 2 * 复选框对话框事件 3 * 4 * @param v 5 */ 6 public void showmultipledialog(view v) { 7 //构件一个对话框builder 8 alertdialog.builder builder = new alertdialog.builder(this); 9 //设置标题 10 builder.settitle(r.string.pick_color); 11 //将资源文件转化为数组对象 12 arr_colors = getresources().getstringarray(r.array.arr_colors); 13 checkeditems=new int[arr_colors.length]; 14 //设置列表内容和点击事件 15 builder.setmultichoiceitems(r.array.arr_colors, null, new dialoginterface.onmultichoiceclicklistener() { 16 @override 17 public void onclick(dialoginterface dialog, int which, boolean ischecked) { 18 string msg=""; 19 if(ischecked){ 20 checkeditems[which]=1; 21 msg="选择"; 22 }else{ 23 checkeditems[which]=0; 24 msg="取消"; 25 } 26 toast.maketext(mainactivity.this, "你"+msg+"了[" + arr_colors[which] + "]", toast.length_short).show(); 27 } 28 }); 29 //积极按钮? 30 builder.setpositivebutton("ok", new dialoginterface.onclicklistener() { 31 @override 32 public void onclick(dialoginterface dialog, int which) { 33 toast.maketext(mainactivity.this, "你选择了ok:"+getcheckeditems(), toast.length_short).show(); 34 } 35 }); 36 //消极按钮 37 builder.setnegativebutton("cancel", new dialoginterface.onclicklistener() { 38 @override 39 public void onclick(dialoginterface dialog, int which) { 40 toast.maketext(mainactivity.this, "你选择了cancel:"+getcheckeditems(), toast.length_short).show(); 41 } 42 }); 43 //创建一个对话框 44 alertdialog dialog = builder.create(); 45 //显示一个对话框 46 dialog.show(); 47 }
自定义对话框
如下图所示(用户可以在弹出的对话框中输入内容等信息)
关键代码如下:
1 /** 2 * 自定义对话框事件按钮 3 * @param v 4 */ 5 public void showcustomerdialog(view v) { 6 7 alertdialog.builder builder = new alertdialog.builder(this); 8 // get the layout inflater 9 layoutinflater inflater = getlayoutinflater(); 10 view customerview=inflater.inflate(r.layout.dialog_layout, null); 11 // inflate and set the layout for the dialog 12 // pass null as the parent view because its going in the dialog layout 13 musername= (edittext) customerview.findviewbyid(r.id.username); 14 mpassword= (edittext) customerview.findviewbyid(r.id.password); 15 builder.setview(customerview) 16 // add action buttons 17 .setpositivebutton(r.string.sign_in, new dialoginterface.onclicklistener() { 18 @override 19 public void onclick(dialoginterface dialog, int id) { 20 // sign in the user ... 21 toast.maketext(mainactivity.this, "你输入的用户名为:"+musername.gettext()+"密码为:"+mpassword.gettext(), toast.length_short).show(); 22 } 23 }) 24 .setnegativebutton(r.string.cancel2, new dialoginterface.onclicklistener() { 25 public void onclick(dialoginterface dialog, int id) { 26 toast.maketext(mainactivity.this, "你取消了输入的用户名密码", toast.length_short).show(); 27 28 } 29 }); 30 //创建一个对话框 31 alertdialog dialog = builder.create(); 32 //显示一个对话框 33 dialog.show(); 34 }
备注
记录学习,记录进步!