Dialog基本要素:标题、消息、按钮
一、普通Dialog:
主要有:AlertDialog,
ProgressDialog,
TimePickerDialog,
CustomDialog(自定义)
1、创建方式
1).AlertDialog
创建AlertDialog,需要用AlertDialog.Builder
AlertDialog.Builder builder = new AlertDialog.Builder(this);
2).ProgressDialog 直接new即可 :ProgressDialog pd = new ProgressDialog(this);
3).DatePickerDialog :
构造方法两个参数:
第一个参数为上下文;
第二个参数是一个监听器OnDateSetListener,需要重写onDateSet方法;
4).TimePickerDialog:
构造方法两个参数:
第一个参数为上下文;
第二个参数是一个监听器OnTimeSetListener,需要重写onTimeSet方法;
5). CustomDialog自定义的Dialog:
AlertDialog.Builder builder2 = new AlertDialog.Builder(this);
//通过布局填充器动态获取布局
View loginView = getLayoutInflater().inflate(R.layout.dialog_login, null, false);
final EditText editName = (EditText) loginView.findViewById(R.id.editName);
builder2.setView(loginView);
builder2.setNegativeButton("取消", null);
builder2.setPositiveButton("确定", new OnClickListener() {
//此处的which只有一个值1,就是选中该按钮
public void onClick(DialogInterface dialog, int which) {
}
});
2.各种基本要素的设置:
①可以设置Dialog的icon
builder.setIcon(R.drawable.ic_launcher);
②可以设置Dialog的title
builder.setTitle(“退出:”);
③可以设置Dialog的message
builder.setMessage(“你确定要离开吗?”);
3.设置点击事件
//当NegativeButton时,第二个参数是一个监听用于引导下一步操作,
//取消的下一步就是退出对话框,而系统默认此时任何点击都退出对话框,故直接设为null即可
builder.setNegativeButton("取消", null);
builder.setPositiveButton("确定", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//销毁一个进程用finish方法
finish();
}
});
builder.show();//该方法等价于builder.create.show();
二、列表Dialog:
普通列表 Builder.setItems
单选 Builder.setSingleChoiceItems
多选 Builder.setMultiChoiceItems
适配器 Builder.setAdapter
全部都是使用AlertDialog.Builder创建
例子1:单选 Builder.setSingleChoiceItems
AlertDialog.Builder builder2 = new AlertDialog.Builder(this);
builder2.setIcon(R.drawable.ic_launcher);
builder2.setTitle("设置字体大小");
//第一个参数:数据源;此处R.array.arrSizes为xml中存储的字号的数组。
//第二个参数:数组下标:此处-1即不默认选中数组中的字号;
//第三个参数:Listener监听器
builder2.setSingleChoiceItems(R.array.arrSizes, -1, new OnClickListener() {
//which代表被选中的item的位置
public void onClick(DialogInterface dialog, int which) {
//此处的position设置的int型全局变量,用于记录被选中的item,本质上即arrSizes数组下标
position = which;
//此处仅仅记录了位置,至于选中Item的后续操作应在用户确认提交该选择的时候才去完成,
//即在setPositiveButton才完成
}
});
builder2.setNegativeButton("取消", null);
builder2.setPositiveButton("确定", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
switch (position) {
//对应下标的dp值,然后设置text.setTextSize(20);
case 0:
text.setTextSize(20);
break;
case 1:
text.setTextSize(30);
break;
case 2:
text.setTextSize(50);
break;
}
}
});
//例子2.多选 Builder.setMultiChoiceItems
final String[] strHobbies = getResources().getStringArray(R.array.arrHobbies);
final boolean[] checkedPosition = new boolean[strHobbies.length];
//此处的boolean数组跟选项数组一一对应,为了判断该选项是否被选中,先定义长度。
AlertDialog.Builder builder3 = new AlertDialog.Builder(this);
builder3.setIcon(R.drawable.ic_launcher);
builder3.setTitle("选择兴趣爱好");
builder3.setMultiChoiceItems(R.array.arrHobbies, null, new OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
checkedPosition[which] = isChecked;//已知boolean数组默认false,该操作为数组赋值。
}
});
builder3.setNegativeButton("取消", null);
builder3.setPositiveButton("确定", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < checkedPosition.length; i++){
if (checkedPosition[i]) {
sb.append(strHobbies[i]).append(",");
}
}
textView.setText(sb.toString());
}
});