赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 手持终端

首页 > 专业技术 > 手持终端 > Android系统的对话框
Android系统的对话框

Android系统提供了多种形式的对话框,可加强用户与应用程序之间的交互。

1.AlertDialog类:提示对话框

AlertDialog提示对话框是Android中基本的对话框,在其中可以显示提示信息,也可以包含若干个按钮、单选按钮和复选框等。一般来说,提示对话框已经可以满足绝大部分的应用程序需求。
1)onCreateDialog方法:初始化对话框
该方法用于初始化一个提示对话框,在该方法中需要对对话框进行设置,在使用提示对话框时,这个方法是必须调用的。语法格式:
protected Dialog onCreateDialog(int id)
其中,参数id为传入的对话框Id。
2)setTitle方法:设置标题
该方法用于设置一个提示对话框显示的标题,通过标题可以表明该对话框的功能。该方法一般在onCreateDialog方法中使用。语法格式有两种:
public AlertDialog.Builder setTitle(CharSequence title)
public AlertDialog.Builder setTitle(int titleId)
其中,参数title为标题字符串,titleId为标题字符串的资源Id。
3)setMessage方法:设置提示信息
该方法用于设置一个提示对话框显示的提示信息,该信息直接呈现给用户,该方法一般在onCreateDialog方法中使用。语法格式有两种:
public AlertDialog.Builder setMessage(CharSequence message)
public AlertDialog.Builder setMessage(int messageId)
其中,参数message为提示信息字符串,messageId为提示信息字符串的资源Id。
4)setIcon方法:设置图标
该方法用于设置一个提示对话框显示的图标。通过设置图标,可以使对话框的功能更直观。该方法一般在onCreateDialog方法中使用。语法格式有两种:
public AlertDialog.Builder setIcon(int iconId)
public AlertDialog.Builder setIcon(Drawable icon)
其中,参数iconId为图标的资源Id,icon为图标的Drawable对象。
5)showDialog方法:显示对话框
该方法用于显示对话框。在使用对话框时,这个方法是必须调用的,使用前必须在onCreateDialog方法中初始化。语法格式:
public final void showDialog(int id)
其中,参数id为传入的对话框Id。
6)create方法:创建对话框
该方法用于按照给定的参数创建一个提示对话框,在使用前必须对对话框进行必要的设置,如标题、提示信息和按钮等,否则没有任何显示效果。语法格式:
public AlertDialog create()
示例:
final int MYDIALOG=1;
EditText et=null;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et=(EditText)findViewById(R.id.editText1);
Button btn=(Button)findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
showDialog(MYDIALOG);
}
});
}
@Override
protected Dialog onCreateDialog(int id){
Dialog dialog=null;
switch(id){
case MYDIALOG:
Builder builder=new AlertDialog.Builder(this);
builder.setTitle("对话框");
builder.setMessage("这是一个对话框!");
dialog=builder.create();
break;
default:
break;
}
return dialog;
}
7)setPositiveButton方法:设置“确定”按钮
该方法用于为提示对话框设置一个“确定”按钮。有多个按钮时,该按钮将放置在对话框的左侧。通过该按钮可以退出对话框,并返回之前的Activity,也可以进行一些数据的交互。为对话框设置按钮是必须的。语法格式:
public AlertDialog.Builder setPositiveButton(CharSequence text,DialogInterface.OnClickListener listener)
其中,参数text为“确定”按钮显示的文本,也可以使用引用字符串资源Id的形式;listener为按钮监听器,设置按钮执行的动作。
8)setNegativeButton方法:设置“取消”按钮
该方法用于为提示对话框设置一个“取消”按钮。有多个按钮时,该按钮将放置在对话框的右侧。通过该按钮可以退出对话框,并返回之前的Activity,也可以进行一些数据的交互。语法格式:
public AlertDialog.Builder setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener)
其中,参数text为“取消”按钮显示的文本,也可以使用引用字符串资源Id的形式;listener为按钮监听器,设置按钮执行的动作。
9)setNeutralButton方法:设置“中间”按钮
该方法用于为提示对话框设置一个“中间”按钮。该按钮放置在“确定”按钮和“取消”按钮中间。通过该按钮可以退出对话框,并返回之前的Activity,也可以进行一些数据交互。语法格式:
public AlertDialog.Builder setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener)
其中,参数text为“中间”按钮显示的文本,也可以使用引用字符串资源Id的形式;listener为按钮监听器,设置按钮执行的动作。
按钮示例:
......
@Override
protected Dialog onCreateDialog(int id){
Dialog dialog=null;
switch(id){
case MYDIALOG:
Builder builder=new AlertDialog.Builder(this);
builder.setTitle("对话框");
builder.setMessage("这是一个对话框!");
builder.setIcon(R.drawable.icon);
builder.setPositiveButton("确定",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog,int which){
et.setText("这来自于对话框!");
}
});
builder.setNegativeButton("取消",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog,int which){
Toast.makeText(getApplicationContext(),"退出了对话框!",
Toast.LENGTH_LONG).show();
}
});
builder.setNeutralButton("中间",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog,int which){
Toast.makeText(getApplicationContext(),"点击了中间按钮!",
Toast.LENGTH_LONG).show();
}
});
dialog=builder.create();
break;
default:
break;
}
return dialog;
}
10)setItems方法:设置列表
该方法用于为提示对话框设置选择列表,这就构成了一种列表形式的对话框,通常用于多个项目进行选择的场合。列表对话框同样通过AlertDialog类来实现,只不过传递的参数不同而已。语法格式有两种:
public AlertDialog.Builder setItems(CharSequence[] items, DialogInterface.OnClickListener listener)
public AlertDialog.Builder setItems(int itemsId, DialogInterface.OnClickListener listener)
其中,items为列表项的字符串数组;itemsId为列表项字符串数组的资源id;listener为监听器,设置点击某个列表项时执行的动作。示例:
String[] str={"面条","馒头","米饭"};
......
@Override
protected Dialog onCreateDialog(int id){
Dialog dialog=null;
switch(id){
case MYDIALOG:
Builder builder=new AlertDialog.Builder(this);
builder.setIcon(R.drawable.icon);
builder.setTitle("请选择最喜欢的食物");
builder.setItems(str,new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog,int which){
et.setText("你最喜欢的食物是:"+str[which]);
}
});
dialog=builder.create();
break;
default:
break;
}
return dialog;
}
11)setSingleChoiceItems方法:设置单选按钮
该方法用于为提示对话框设置单选按钮,构成了单选按钮形式的对话框,通常用于多个项目选择其一的场合。单选按钮对话框同样通过AlertDialog类来实现,只不过传递的参数不同而已。语法格式:
public AlertDialog.Builder setSingleChoiceItems (CharSequence[] items,  int checkedItem, DialogInterface.OnClickListener listener)
其中,参数items为列表项的字符串数组;checkedItem为默认哪一项被选中,如果为-1,则表示没有选中项;listener为监听器,设置点击某个列表项时执行的动作。示例:
int num;
......
@Override
protected Dialog onCreateDialog(int id){
Dialog dialog=null;
switch(id){
case MYDIALOG:
Builder builder=new AlertDialog.Builder(this);
builder.setIcon(R.drawable.icon);
builder.setTitle("请选择最喜欢的食物");
builder.setSingleChoiceItems(str,0,new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog,int which){
num=which;
}
});
builder.setPositiveButton("确定",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog,int which){
et.setText("你最喜欢的食物是:"+str[num]);
}
});
dialog=builder.create();
break;
default:
break;
}
return dialog;
}
12)setMultiChoiceItems方法:设置复选框
该方法用于为提示对话框设置复选框,构成了复选框形式的对话框,通常用于多个项目进行选择的场合。复选框对话框同样通过AlertDialog类来实现,只不过传递的参数不同而已。语法格式:
public AlertDialog.Builder setMultiChoiceItems (CharSequence[] items,  boolean[] checkedItem, DialogInterface.OnMultiChoiceClickListener listener)
其中,参数items为列表项的字符串数组;checkedItem为默认哪一项被选中,布尔型数组;listener为监听器,设置点击某个列表项时执行的动作。示例:
boolean[] flags={true,false,true};
......
@Override
protected Dialog onCreateDialog(int id){
Dialog dialog=null;
switch(id){
case MYDIALOG:
Builder builder=new AlertDialog.Builder(this);
builder.setIcon(R.drawable.icon);
builder.setTitle("请选择最喜欢的食物");
builder.setMultiChoiceItems(str,flags,new
DialogInterface.OnMultiChoiceClickListener(){
@Override
public void onClick(DialogInterface dialog,int which,boolean isChecked){
flage[which]=isChecked;
}
});
builder.setPositiveButton("确定",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog,int which){
String temp="你最喜欢的食物是:";
for(int i=0;i<flags.length;i++){
if(flags[i]) temp=temp+str[i];
}
et.setText(temp);
}
});
dialog=builder.create();
break;
default:
break;
}
return dialog;
}

2.DatePickerDialog类:日期选择对话框

DatePickerDialog类实现了日期选择对话框,这种对话框类似于日期选择控件,只不过是通过对话框的形式呈现给用户的。Android在DatePickerDialog类中进行了很好的封装,开发者只需要简单地调用便可以使用日期选择对话框。
日期选择对话框同样需要在onCreateDialog方法中进行设置,并通过showDialog方法来呈现给用户。这里主要用到OnDateSetListener方法。语法格式:
public DatePickerDialog OnDateSetListener()
示例:
Calendar calendar=null;
......
@Override
protected Dialog onCreateDialog(int id){
Dialog dialog=null;
switch(id){
case MYDIALOG:
calendar=Calendar.getInstance();
dialog=new DatePickerDialog(this,new DatePickerDialog.OnDateSetListener(){
@Override
public void onDateSet(DatePicker view,int year,
int monthOfYear,int dayOfMonth){
et.setText("设置的日期为:"+year+"年"+(monthOfYear+1)+"月"
+dayOfMonth+"日");
}
},
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH)
);
dialog=builder.create();
break;
default:
break;
}
return dialog;
}

3.TimePickerDialog类:时间选择对话框

TimePickerDialog类实现了时间选择对话框,这种对话框类似于时间选择控件,只不过是通过对话框的形式呈现给用户。Android在TimePickerDialog类中进行了很好的封装,开发者只需要简单地调用便可以使用。
时间选择对话框同样需要在onCreateDialog方法中进行设置,并通过showDialog方法来呈现给用户,主要使用到OnTimeSetListener方法。语法格式:
public DatePickerDialog OnDateSetListener()
示例:
Calendar calendar=null;
......
@Override
protected Dialog onCreateDialog(int id){
Dialog dialog=null;
switch(id){
case MYDIALOG:
calendar=Calendar.getInstance();
dialog=new TimePickerDialog(this,new TimePickerDialog.OnTimeSetListener(){
@Override
public void onTimeSet(TimePicker view,int hourOfDay,int minute){
et.setText("设置的时间为:"+hourOfDay+"点"+minute+"分");
}
},
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
false);
dialog=builder.create();
break;
default:
break;
}
return dialog;
}

4.ProgressDialog类:进度条对话框

ProgressDialog类实现了Android中的进度条对话框,其中包括一个进度条,主要用于显示一些操作的进度。ProgressDialog类与ProgressBar类似,很多方法都与进度条控件类似,只不过是通过对话框的形式呈现给用户。ProgressDialog更适合于程序使用。
1)setMax方法:设置最大值
该方法用于设置一个ProgressDialog进度条对话框中进度条的最大值,在默认情况下进度条的最大值为100。该方法一般在onCreateDialog方法中使用。语法格式:
public void setMax(int max)
其中,参数max为设置的进度条最大值,此时进度条的范围为0~max。
2)setTitle方法:设置标题
该方法用于设置一个ProgressDialog进度条对话框的标题,通过标题可以表明该对话框的功能。该方法一般在onCreateDialog方法中使用。语法格式有两种形式:
public void setTitle(CharSequence title)
public void setTitle(int titleId)
其中,参数title为标题字符串,titleId为标题字符串的资源Id。
3)setProgressStyle方法:设置进度条样式
该方法用于设置一个ProgressDialog进度条对话框中进度条的样式。该方法一般在onCreateDialog方法中使用。语法格式:
public void setProgressStyle(int style)
其中,参数style为进度条的样式,可以选取如下两种样式:
·ProgressDialog.STYLE_SPINNER:圆圈样式的进度条
·ProgressDialog.STYLE_HORIZONTAL:水平样式的进度条
4)incrementProgressBy方法:设置递增步长
该方法用于设置一个ProgressDialog进度条对话框中进度增加的步长。该方法一般在onCreateDialog方法中使用。语法格式:
public void incrementProgressBy(int diff)
其中,参数diff为进度条进度增加的步长。
5)getProgress方法:获取当前进度值
该方法用于获取一个ProgressDialog进度条对话框中的当前进度值。该方法是获知进度的主要方法,通常用于进度的末尾来关闭对话框,并提示用户已经操作完成。语法格式:
public void getProgress()
6)onPrepareDialog方法:准备对话框
该方法用于每次调用对话框时初始化对话框。该方法主要用于每次执行对话框都需要对某些参数进行重新设置的场合。语法格式:
protected void onPrepareDialog(int id,Dialog dialog)
其中,参数id为传入的对话框Id,参数dialog为对话框对象。
7)setCancelable方法:设置是否可以取消
该方法用于设置是否可以取消进度条对话框的进度过程。如果设置为可以取消,在Android手机中,点击后台按钮则可以取消当前进度条对话框的线程。语法格式:
public void setCancelable(boolean flag)
其中,参数flag表示是否可以取消,true表示可以取消,false表示不可以取消。
示例:
final int MYDIALOG=1;
EditText et=null;
final int INCREASE=0;
ProgressDialog dialog=null;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et=(EditText)findViewById(R.id.editText1);
Button btn=(Button)findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
showDialog(MYDIALOG);
}
});
}
@Override
protected Dialog onCreateDialog(int id){
switch(id){
case MYDIALOG:
dialog=new ProgressDialog(this);
dialog.setMax(100);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setTitle("安装进度");
dialog.setCancelable(true);
break;
default:
break;
}
return dialog;
}
@Override
protected void onPrepareDialog(int id,Dialog dialog1){
super.onPrepareDialog(id,dialog1);
switch(id){
case MYDIALOG:
dialog.incrementProgressBy(-dialog.getProgress());
et.setText("开始下载!");
Thread thread=new Thread(){
public void run(){
while(true){
dialog.incrementProgressBy(1);
if(dialog.getProgress()>=100) {
et.setText("下载完毕!");
dialog.dismiss();
}
try{Thread,sleep(50);}
catch(Exception e){e.printStackTrace();}
}
}
};
thread.start();
break;
}
}

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659