android 会话 java_Android(java)学习笔记140:常用的对话框

本文介绍了Android中常见的对话框属性与用法,包括AlertDialog.Builder和ProgressDialog的各种设置,如设置标题、消息、按钮、单选和多选列表等,并通过代码示例展示了如何创建确认取消对话框、单选和多选对话框以及进度对话框,帮助开发者更好地理解和应用这些对话框。
摘要由CSDN通过智能技术生成

一、常见对话框属性:

1. AlertDialog.Builder属性

•setTitle: 为对话框设置标题 ;

• setIcon : 为对话框设置图标;

• setMessage: 为对话框设置内容;

•setView :  给对话框设置自定义样式 ;

• setItems: 设置对话框要显示的一个list,一般用于显示几个命令时;

• setMultiChoiceItems:用来设置对话框显示一系列的复选框;

• setNeutralButton : 响应中立行为的点击;

• setPositiveButton : 响应Yes/Ok的点击 ;

• setNegativeButton :响应No/Cancel的点击 ;

• create : 创建对话框 ;

•show : 显示对话框;

2. ProgressDialog属性

•setProgressStyle:      设置进度条风格,风格为圆形,旋转的;

•setTitlt:                     设置ProgressDialog 标题;

•setMessage:              设置ProgressDialog提示信息;

•setIcon:                    设置ProgressDialog标题图标;

•setIndeterminate:     设置ProgressDialog 的进度条是否不明确;

•setCancelable:           设置ProgressDialog 是否可以按返回键取消;

•setButton:                设置ProgressDialog 的一个Button(需要监听Button事件);

•show:                       显示ProgressDialog。

二、常见对话框案例演示:

1.确认取消对话框:

AlertDialog.Builder builder = new Builder(this);//告诉工厂生产什么样的产品

builder.setTitle("友情提醒");

builder.setMessage("若练此功,必先自宫,是否继续?");

builder.setPositiveButton("好的,想好了", newOnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, intwhich) {

Toast.makeText(MainActivity.this, "啊。。。", 0).show();

Toast.makeText(MainActivity.this, "及时自宫,也不一定成功", 0).show();

}

});

builder.setNegativeButton("想想再说", newOnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, intwhich) {

Toast.makeText(MainActivity.this, "若不自宫,一定不成功", 0).show();

}

});

builder.create().show();

builder.create().show();

这里的只有工厂(AlertDialog.Builder)先创建create()出来AlertDialog然后我们才能show()出来;

这里我们看看create()方法的源码如下:

publicAlertDialog create() {final AlertDialog dialog = new AlertDialog(P.mContext, mTheme, false);

P.apply(dialog.mAlert);

dialog.setCancelable(P.mCancelable);if(P.mCancelable) {

dialog.setCanceledOnTouchOutside(true);

}

dialog.setOnCancelListener(P.mOnCancelListener);if (P.mOnKeyListener != null) {

dialog.setOnKeyListener(P.mOnKeyListener);

}returndialog;

}

返回一个AlertDialog,然后我们再看看show()的源码如下:

publicAlertDialog show() {

AlertDialog dialog=create();

dialog.show();returndialog;

}

我们发现这里show()中其实也先实现了create(),,所以上面的:

builder.create().show();其实可以改写成:builder.show();

运行的效果如下:

66a2754c51ac821b5f04918e91e6ff34.png

2.单选对话框

//工厂模式。

AlertDialog.Builder builder = new Builder(this);//告诉工厂生产什么样的产品

builder.setTitle("请选择性别:");final String[] items = { "男", "女", "未知"};

builder.setSingleChoiceItems(items,2, newOnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, intwhich) {

dialog.dismiss();//关闭对话框

Toast.makeText(MainActivity.this, "您的性别:" + items[which], 0)

.show();

}

});

builder.show();

setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener)方法来实现类似RadioButton的AlertDialog

第一个参数是要显示的数据的数组;

第二个参数是初始值(初始被选中的item);

第三个参数是点击某个item的触发事件;

这里OnClickListener里面方法public void onClick(DialogInterface dialog, int which):

第一个参数:用来系统确定对话框(程序中出现多个对话框的时候,系统靠的就是这个参数DialogInterface dialog来确定我们点击的对话框);

第二个参数:用来系统确定我们点击选择的对话框中的子项目;

运行的效果如下:

41b622af8482444239000428859b928b.png

3. 多选对话框

//工厂模式。

AlertDialog.Builder builder = new Builder(this);//告诉工厂生产什么样的产品

builder.setTitle("请选择您喜欢的水果:");final String[] items = { "苹果", "香蕉", "葡萄", "橘子"};final boolean[] result = new boolean[] { true, true, false, false};

builder.setMultiChoiceItems(items, result,newOnMultiChoiceClickListener() {

@Overridepublic void onClick(DialogInterface dialog, intwhich,booleanisChecked) {

result[which]=isChecked;

Toast.makeText(MainActivity.this,

items[which]+ isChecked, 0).show();

}

});

builder.setPositiveButton("提交", newDialogInterface.OnClickListener() {

@Overridepublic void onClick(DialogInterface dialog, intwhich) {

StringBuffer sb= newStringBuffer();for (int i = 0; i < result.length; i++) {if(result[i]) {

sb.append(items[i]+ ",");

}

}

Toast.makeText(MainActivity.this, "您喜欢:" + sb.toString(), 0)

.show();

}

});

builder.show();

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

第一个参数:指定我们要显示的一组下拉多选框的数据集合

第二个参数:代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择,

需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true};

第三个参数:给每一个多选项绑定一个监听器

这里的监听器OnMultiChoiceClickListener 中的方法:public void onClick(DialogInterface dialog, int which,boolean isChecked)

第一个参数:用来确定此处工厂模式创建的对话框;

第二个参数:用来确定对话框中我们点击的子项;

第三个参数:用来判别对话框的子项的点击状态(true:表示子项选择;false:表示子项没有被选择)

运行效果:

0d8f4c9e56dac6a294804f63abe4b972.png

4.进度对话框

(1)圆形进度条

final ProgressDialog pd = new ProgressDialog(this);

pd.setTitle("提醒");

pd.setMessage("正在处理中。。。请稍后");

pd.show();newThread() {public voidrun() {try{

Thread.sleep(5000);

}catch(InterruptedException e) {

e.printStackTrace();

}

pd.dismiss();

};

}.start();

运行效果:

9159edbfdb9a23899453f89d97a78c2b.png

(2)水平进度条

final ProgressDialog pd = new ProgressDialog(this);//设置进度的样式

pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

pd.setTitle("提醒");

pd.setMessage("正在处理中。。。请稍后");

pd.show();newThread() {public voidrun() {

pd.setMax(100);try{for (int i = 0; i <= 100; i++) {

pd.setProgress(i);

Thread.sleep(500);

}

}catch(InterruptedException e) {

e.printStackTrace();

}

pd.dismiss();

};

}.start();

运行结果:

fab93bf788d7bff869cdf9199e8e24b6.png

5.上面代码都是我案例一部分代码,附上的案例程序如下:

(1)activity_main.xml:

布局效果:

c59f1577f5b96dc8f0157ff36868228e.png

(2)接下来就是:MainAcitivity.java:

1 packagecom.itheima.dialogset;2

3 importandroid.app.Activity;4 importandroid.app.AlertDialog;5 importandroid.app.AlertDialog.Builder;6 importandroid.app.ProgressDialog;7 importandroid.content.DialogInterface;8 importandroid.content.DialogInterface.OnClickListener;9 importandroid.content.DialogInterface.OnMultiChoiceClickListener;10 importandroid.os.Bundle;11 importandroid.view.View;12 importandroid.widget.Toast;13

14 public class MainActivity extendsActivity {15

16 @Override17 protected voidonCreate(Bundle savedInstanceState) {18 super.onCreate(savedInstanceState);19 setContentView(R.layout.activity_main);20 }21

22 /**

23 * 确定取消对话框24 *25 *@paramview26 */

27 public voidclick01(View view) {28 //工厂模式。

29 AlertDialog.Builder builder = new Builder(this);30 //告诉工厂生产什么样的产品

31 builder.setTitle("友情提醒");32 builder.setMessage("若练此功,必先自宫,是否继续?");33 builder.setPositiveButton("好的,想好了", newOnClickListener() {34 @Override35 public void onClick(DialogInterface dialog, intwhich) {36 Toast.makeText(MainActivity.this, "啊。。。", 0).show();37 Toast.makeText(MainActivity.this, "及时自宫,也不一定成功", 0).show();38 }39 });40 builder.setNegativeButton("想想再说", newOnClickListener() {41

42 @Override43 public void onClick(DialogInterface dialog, intwhich) {44 Toast.makeText(MainActivity.this, "若不自宫,一定不成功", 0).show();45 }46 });47 builder.show();48 }49

50 /**

51 * 单选对话框52 *53 *@paramview54 */

55 public voidclick02(View view) {56 //工厂模式。

57 AlertDialog.Builder builder = new Builder(this);58 //告诉工厂生产什么样的产品

59 builder.setTitle("请选择性别:");60 final String[] items = { "男", "女", "未知"};61 builder.setSingleChoiceItems(items, 2, newOnClickListener() {62 @Override63 public void onClick(DialogInterface dialog, intwhich) {64 dialog.dismiss();//关闭对话框

65 Toast.makeText(MainActivity.this, "您的性别:" + items[which], 0)66 .show();67 }68 });69 builder.show();70 }71

72 /**

73 * 多选对话框74 *75 *@paramview76 */

77 public voidclick03(View view) {78 //工厂模式。

79 AlertDialog.Builder builder = new Builder(this);80 //告诉工厂生产什么样的产品

81 builder.setTitle("请选择您喜欢的水果:");82 final String[] items = { "苹果", "香蕉", "葡萄", "橘子"};83 final boolean[] result = new boolean[] { true, true, false, false};84 builder.setMultiChoiceItems(items, result,85 newOnMultiChoiceClickListener() {86 @Override87 public void onClick(DialogInterface dialog, intwhich,88 booleanisChecked) {89 result[which] =isChecked;90 Toast.makeText(MainActivity.this,91 items[which] + isChecked, 0).show();92 }93 });94 builder.setPositiveButton("提交", newDialogInterface.OnClickListener() {95 @Override96 public void onClick(DialogInterface dialog, intwhich) {97 StringBuffer sb = newStringBuffer();98 for (int i = 0; i < result.length; i++) {99 if(result[i]) {100 sb.append(items[i] + ",");101 }102 }103 Toast.makeText(MainActivity.this, "您喜欢:" + sb.toString(), 0)104 .show();105 }106 });107 builder.show();108 }109

110 /**

111 * 进度对话框112 *113 *@paramview114 */

115 public voidclick04(View view) {116 final ProgressDialog pd = new ProgressDialog(this);117 pd.setTitle("提醒");118 pd.setMessage("正在处理中。。。请稍后");119 pd.show();120 newThread() {121 public voidrun() {122 try{123 Thread.sleep(5000);124 } catch(InterruptedException e) {125 e.printStackTrace();126 }127 pd.dismiss();128 };129 }.start();130 }131

132 /**

133 * 进度条对话框134 *135 *@paramview136 */

137 public voidclick05(View view) {138 final ProgressDialog pd = new ProgressDialog(this);139 //设置进度的样式

140 pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);141 pd.setTitle("提醒");142 pd.setMessage("正在处理中。。。请稍后");143 pd.show();144 newThread() {145 public voidrun() {146 pd.setMax(100);147 try{148 for (int i = 0; i <= 100; i++) {149 pd.setProgress(i);150 Thread.sleep(500);151 }152 } catch(InterruptedException e) {153 e.printStackTrace();154 }155 pd.dismiss();156 };157 }.start();158 }159

160 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值