Android对话框的实现

这篇博客主要介绍了Android中两种常用的对话框样式:普通样式和列表样式Dialog,并提供了相关关键代码示例。此外,还推荐了几篇关于Dialog对话框的参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android提供了丰富的Dialog样式,现把几种常用的对话框样式关键代码进行展示:

(1)普通样式Dialog

button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				AlertDialog.Builder normalDialog = new AlertDialog.Builder(DialogActivity.this);
				normalDialog.setIcon(R.drawable.logo)//设置对话框图标
					.setTitle("普通样式Dialog")//设置对话框标题
					.setMessage("你要点击哪一个按钮?")//设置对话框提示信息
					.setPositiveButton("确定", new DialogInterface.OnClickListener() {//确定按钮实现的功能
						
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// 点击确定按钮时需要实现的功能
						}
					})
					.setNegativeButton("取消", new DialogInterface.OnClickListener() {//取消按钮实现的功能
						
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// 点击取消按钮时需要实现的功能
						}
					})
					.setNeutralButton("中立", new DialogInterface.OnClickListener() {//中立按钮实现的功能
						
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// 点击中立按钮时需要实现的功能
						}
					}).show();//调用show方法把对话框展示出来
					
			}
		});

(2)列表样式Dialog

//列表项最好是放在res/values/strings.xml文件中
		final String[] items = {"第1项", "第2项", "第3项", "第4项"};
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				AlertDialog.Builder listDialog = new AlertDialog.Builder(DialogActivity.this);
				listDialog.setIcon(R.drawable.logo)//设置对话框图标
					.setTitle("列表样式Dialog")//设置对话框标题
					.setItems(items, new DialogInterface.OnClickListener() {
						
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// which下标从0开始
							Toast.makeText(DialogActivity.this, 
					                "你点击了" + items[which], 
					                Toast.LENGTH_SHORT).show();
						}
					})
					.show();//调用show方法把对话框展示出来
					
			}
		});

(3)单选样式Dialog

//列表项最好是放在res/values/strings.xml文件中
		final String[] items = {"第1项", "第2项", "第3项", "第4项"};
		youchoice = -1;
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				AlertDialog.Builder singleChoiceDialog = new AlertDialog.Builder(DialogActivity.this);
				singleChoiceDialog.setIcon(R.drawable.logo)//设置对话框图标
					.setTitle("单选样式Dialog")//设置对话框标题
					.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {//把列表项展示出来,默认选中第一项
						
						@Override
						public void onClick(DialogInterface dialog, int which) {
							youchoice = which;
						}
					})
					.setPositiveButton("确定", new DialogInterface.OnClickListener() {
						
						@Override
						public void onClick(DialogInterface dialog, int which) {
							if (youchoice != -1) {
								Toast.makeText(DialogActivity.this, 
						                "你选择了" + items[youchoice], 
						                Toast.LENGTH_SHORT).show();
							}
						}
					})
					.show();//调用show方法把对话框展示出来
					
			}
		});

(4)多选样式Dialog

final ArrayList<Integer> yourChoices = new ArrayList<>();
		//列表项最好是放在res/values/strings.xml文件中
		final String[] items = {"第1项", "第2项", "第3项", "第4项"};
		//设置默认选中的选项,跟items一一对应起来
		final boolean[] initChoiceSets={false,false,false,false};
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				AlertDialog.Builder multiChoiceDialog  = new AlertDialog.Builder(DialogActivity.this);
				multiChoiceDialog .setIcon(R.drawable.logo)//设置对话框图标
					.setTitle("多选样式Dialog")//设置对话框标题
					.setMultiChoiceItems(items, initChoiceSets, new OnMultiChoiceClickListener() {
						
						@Override
						public void onClick(DialogInterface dialog, int which, boolean isChecked) {
							if (isChecked) {
				                yourChoices.add(which);
				            } else {
				                yourChoices.remove(which);
				            }
						}
					})
					.setPositiveButton("确定", new DialogInterface.OnClickListener() {
						
						@Override
						public void onClick(DialogInterface dialog, int which) {
							int size = yourChoices.size();
				            String str = "";
				            for (int i = 0; i < size; i++) {
				                str += items[yourChoices.get(i)] + " ";
				            }
				            Toast.makeText(DialogActivity.this, 
				                "你选中了" + str, 
				                Toast.LENGTH_SHORT).show();
						}
					})
					.show();//调用show方法把对话框展示出来
					
			}
		});

(5)等待样式Dialog

button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				/* 等待Dialog具有屏蔽其他控件的交互能力
			     * @setCancelable 为使屏幕不可点击,设置为不可取消(false)
			     * 下载等事件完成后,主动调用函数关闭该Dialog
			     */
				ProgressDialog waitingDialog  = new ProgressDialog(DialogActivity.this);
				waitingDialog .setIcon(R.drawable.logo);//设置对话框图标
				waitingDialog.setTitle("进度条等待样式Dialog");//设置对话框标题
				waitingDialog.setMessage("等待中......");
				waitingDialog.setIndeterminate(true);//设置ProgressDialog 的进度条是否不明确
			    waitingDialog.setCancelable(false);//设置
			    waitingDialog.show();//调用show方法把对话框展示出来
					
			}
		});

(6)进度条样式Dialog

final int MAX_PROGRESS  = 100;
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				/* 等待Dialog具有屏蔽其他控件的交互能力
			     * @setCancelable 为使屏幕不可点击,设置为不可取消(false)
			     * 下载等事件完成后,主动调用函数关闭该Dialog
			     */
				final ProgressDialog progressDialog   = new ProgressDialog(DialogActivity.this);
				progressDialog.setProgress(0);//设置初始进度
				progressDialog.setTitle("进度条显示进度样式Dialog");
				progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置进度条的样式为水平模式
				progressDialog.setMax(MAX_PROGRESS);//设置进度条的最大值
				progressDialog .show();//调用show方法把对话框展示出来
				/* 模拟进度增加的过程
			     * 新开一个线程,每个100ms,进度增加1
			     */
				new Thread(new Runnable() {
					
					@Override
					public void run() {
						int progress = 0;
						while (progress < MAX_PROGRESS) {
							try {
								Thread.sleep(100);//休眠100ms
								progress++;
								progressDialog.setProgress(progress);
							} catch (InterruptedException e) {
								e.printStackTrace();
							}
						}
						//进度达到最大值是,窗口消失
						progressDialog.cancel();
					}
				}).start();
			}
		});

(7)可编辑样式Dialog

button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				final EditText editText = new EditText(DialogActivity.this);
				AlertDialog.Builder inputDialog = 
				        new AlertDialog.Builder(DialogActivity.this);
				inputDialog.setTitle("可编辑样式Dialog")
						.setView(editText);
				inputDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
							
							@Override
							public void onClick(DialogInterface dialog, int which) {
								Toast.makeText(DialogActivity.this,
							            editText.getText().toString(), 
							            Toast.LENGTH_SHORT).show();
							}
						})
						.show();
			}
		});

(8)自定义样式Dialog
button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				AlertDialog.Builder customizeDialog  = 
				        new AlertDialog.Builder(DialogActivity.this);
				final View dialogView = LayoutInflater.from(DialogActivity.this)
							.inflate(R.layout.dialog_customize, null);
				customizeDialog .setTitle("自定义样式Dialog")
							.setView(dialogView)
							.setPositiveButton("确定", new DialogInterface.OnClickListener() {
								
								@Override
								public void onClick(DialogInterface dialog, int which) {
									// 获取EditView中的输入内容
									EditText editText = (EditText) dialogView.findViewById(R.id.edit_text);
									Toast.makeText(DialogActivity.this,
											editText.getText().toString(),
							                Toast.LENGTH_SHORT).show();
								}
							})
						.show();
			}
		});

关于Dialog对话框,也可参考如下文章:

http://www.oschina.net/question/54100_32486

http://www.cnblogs.com/xiaoluo501395377/p/3419398.html

http://bbs.itheima.com/thread-219659-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值