Android最常见的对话框是
AlertDialog弹窗以及PopupWindow浮动对话框
一 . AlertDialog对话框
-> 带消息、带按钮的提示对话框
-> 带列表、带按钮的列表对话框
-> 带多个单选列表项、N个按钮的对话框
-> 带多个多选列表项、N个按钮的对话框
另外AlertDialog还可以创建自定义对话框
使用AlertDialog创建对话框的大致步骤是
1)创建AlertDialog.Builder对象,该对象是AlertDialog的创建器
2)调用AlertDialog.Builder的方法设置图标、标题、内容,以及按钮
3)调用AlertDialog.Builder的create() 方法创建对话框
4)调用AlertDialog.Builder的show() 方法显示对话框
1》显示提示消息的对话框
Builder builder=new AlertDialog.Builder(DialogActivity.this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("消息对话框");
builder.setMessage("一个简单提示");
builder.setPositiveButton("确定", new OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(DialogActivity.this, "点击了确定",1).show();
}
});
builder.setNegativeButton("取消", new OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(DialogActivity.this, "点击了取消",1).show();
}
});
builder.create().show();
2》列表对话框
Builder builder=new AlertDialog.Builder(DialogActivity.this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("列表对话框");
builder.setItems(new String[]{ "红色","蓝色","绿色" }, new OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
TextView textView=(TextView)findViewById(R.id.textView_show_color);
switch(which){
case 0:
textView.setBackgroundColor(Color.RED);break;
case 1:
textView.setBackgroundColor(Color.BLUE);break;
case 2:
textView.setBackgroundColor(Color.GREEN);break;
default:
textView.setBackgroundColor(Color.BLACK);
}
}
});
builder.create().show();
3》单选对话框
int choose=0;
Builder builder=new AlertDialog.Builder(DialogActivity.this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("列表单选对话框");
builder.setSingleChoiceItems(new String[]{ "灰色","孔雀蓝","黄色" }, choose,new OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
choose=which;
}
});
builder.setPositiveButton("确定", new OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
TextView textView=(TextView)findViewById(R.id.textView_show_color);
switch(choose){
case 0:
textView.setBackgroundColor(Color.GRAY);break;
case 1:
textView.setBackgroundColor(Color.CYAN);break;
case 2:
textView.setBackgroundColor(Color.YELLOW);break;
default:
textView.setBackgroundColor(Color.BLACK);
}
}
});
builder.create().show();
4》多选对话框
Builder builder=new AlertDialog.Builder(DialogActivity.this);
final String myColor[]={ "苹果","香蕉","橘子" };
final boolean isChoose[]={true,false,true};
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("列表多选对话框");
builder.setMultiChoiceItems(myColor,isChoose, new OnMultiChoiceClickListener(){
//选中某一选项的监听事件
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// TODO Auto-generated method stub
Toast.makeText(DialogActivity.this, myColor[which]+isChecked,1).show();
}
});
builder.setPositiveButton("确定", null);
builder.create().show();
5》自定义对话框
Java代码
Builder builder=new AlertDialog.Builder(DialogActivity.this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("自定义登入对话框");
TableLayout loginForm=(TableLayout)getLayoutInflater().inflate(R.layout.login, null);
builder.setView(loginForm);//设置对话框为自定义布局
builder.setPositiveButton("登入", new OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
builder.setNegativeButton("取消", new OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
builder.create().show();
登入框的布局文件R.layout.login, 可自己随意定义
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TableRow >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="用户名:"
android:textSize="10pt"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请填写账号"
android:selectAllOnFocus="true"/>
</TableRow>
<TableRow >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="密码:"
android:textSize="10pt"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:password="true"/>"
</TableRow>
<TableRow >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="电话号码:"
android:textSize="10pt"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="填写电话号码"
android:phoneNumber="true"
android:selectAllOnFocus="true"/>
</TableRow>
<TableRow >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="注册"/>
</TableRow>
</TableLayout>
二. PopupWindow浮动对话框
界面上定义一个Button
点击后PopupWindow挨着button出现
View root=this.getLayoutInflater().inflate(R.layout.popup, null);
//创建popupWindows对象
final PopupWindow popup=new PopupWindow(root,280,200);
Button button=(Button)findViewById(R.id.button_show_popup);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
popup.showAsDropDown(v);//显示对话框
}
});
root.findViewById(R.id.button_close).setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
popup.dismiss();//关闭对话框
}
});
PopupWIndow的布局R.layout.popup
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#2E2E2E">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<CheckedTextView
android:id="@+id/checkedTextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CheckedTextView" />
<Button
android:id="@+id/button_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="close" />
</LinearLayout>
三. 总结
AlertDialog和PopupWindow基本能满足Android开发中对话框的需求,
另外安卓还提供了DatePickerDialog(日期选择对话框)和TimePickerDialog(时间选择对话框),以及ProgressDialog(进度对话框)