Android---Dialog
android中对话框种类有AlertDialog、DatePickerDialog(日期对话框)、TimePickerDialog(时间对话框)、ProgressDialog(进度条对话框)几种。
通过重写Acitivity的onCreateDialog(int id)函数,可以定制各种Dialog挂载在Activity上,当需要使用的时候直接通过this.showDialog(int id)即可。
Main.this.showDialog(0);
在Activity里第一次show某个Dialog,则先调用onCreateDialog,得到返回的Dialog对象并挂靠在Activity,保存Dialog对象的引用,然后才显示Dialog。再次show Dialog就不用重新创建Dialog对象,而是直接使用之前的实例化对象(日期对话框、时间对话框明显体现)。
AlertDialog对话框较常用的属性设置和方法有setTitle、setMessage、setIcon、添加Yes/No按钮等等
代码
builder= new AlertDialog.Builder(this);
builder.setTitle("");
builder.setMessage("Are you sure you want to exit?");
builder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
builder.setNegativeButton("no", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub//清除Dialog
dialog.dismiss();
}
});
return builder.create();
使用自定义view的Dialog
代码
//自定义的Dialog
builder=new AlertDialog.Builder(this);
LayoutInflater flater=LayoutInflater.from(this);
final View view=flater.inflate(R.layout.login, null);//从xml中加载布局文件
builder.setTitle("用户登录");
builder.setView(view);
builder.setPositiveButton("确定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
etname=(EditText)view.findViewById(R.id.etname);//在自定义的View对象中查找EditText
etpwd=(EditText)view.findViewById(R.id.etpwd);
String uname=etname.getText().toString();
String pwd=etpwd.getText().toString();
Toast.makeText(Main.this, "uanme:"+uname+",pwd:"+pwd, Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();//取消对话框
}
});
return builder.create();
带list的AlertDialog(普通item/单选按钮/复选框)
代码
builder=new AlertDialog.Builder(this);
builder.setTitle("Item");
final CharSequence[] items={"red","green","blue"};
// dialog.setItems(R.array.ary, new DialogInterface.OnClickListener() {
//
// @Override
// public void onClick(DialogInterface dialog, int which) {
// // TODO Auto-generated method stub
// String[] ary =
// getResources().getStringArray(R.array.ary); //获得数组
// Toast.makeText(Main.this, ary[which], Toast.LENGTH_LONG).show();
// }
// });
//
// dialog.setItems(items, new DialogInterface.OnClickListener() {
//
// @Override
// public void onClick(DialogInterface dialog, int which) {
// // TODO Auto-generated method stub
// Toast.makeText(Main.this, items[which], Toast.LENGTH_LONG).show();
// }
// });
//单选按钮的列表
builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(Main.this, items[which], Toast.LENGTH_LONG).show();
dialog.dismiss();
}
});
// //复选框的列表
// final boolean[] bls={true,true,true};
// dialog.setMultiChoiceItems(items, bls, new DialogInterface.OnMultiChoiceClickListener() {
//
// @Override
// public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// // TODO Auto-generated method stub
// Toast.makeText(Main.this, items[which], Toast.LENGTH_LONG).show();
// }
// });
return builder.create();
DatePickerDialog(日期对话框)、TimePickerDialog(时间对话框)、ProgressDialog(进度条对话框)
代码
case 3:
//带进度条的Dialog
ProgressDialog pdlg=new ProgressDialog(this);
pdlg.setMessage("Loading please wait .....");
pdlg.setTitle("");
pdlg.setCancelable(true);//设置是否可以取消对话框
pdlg.setProgressStyle(ProgressDialog.STYLE_SPINNER);
return pdlg;
case 4:
//日期对话框
Calendar c=Calendar.getInstance();
Dialog dialog=new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override//
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
Toast.makeText(Main.this, "year:"+String.valueOf(year)+";month:"+monthOfYear, Toast.LENGTH_LONG).show();
}
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE));
return dialog;
case 5:
//时间对话框
//修改之后,再次打开对话框,显示的时间将是修改之后的值
Calendar c1=Calendar.getInstance();
Dialog tdlg=new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// TODO Auto-generated method stub
Toast.makeText(Main.this, "hour:"+String.valueOf(hourOfDay)+";minute:"+minute, Toast.LENGTH_LONG).show();
}
},c1.get(Calendar.HOUR), c1.get(Calendar.MINUTE), true);
return tdlg;


浙公网安备 33010602011771号