Android提供了丰富的Dialog样式,现把几种常用的对话框样式关键代码进行展示:
(1)普通样式Dialog
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder normalDialog = new AlertDialog.Builder(DialogActivity.this);
normalDialog.setIcon(R.drawable.logo)//设置对话框图标
.setTitle("普通样式Dialog")//设置对话框标题
.setMessage("你要点击哪一个按钮?")//设置对话框提示信息
.setPositiveButton("确定", new DialogInterface.OnClickListener() {//确定按钮实现的功能
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击确定按钮时需要实现的功能
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {//取消按钮实现的功能
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击取消按钮时需要实现的功能
}
})
.setNeutralButton("中立", new DialogInterface.OnClickListener() {//中立按钮实现的功能
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击中立按钮时需要实现的功能
}
}).show();//调用show方法把对话框展示出来
}
});
(2)列表样式Dialog
//列表项最好是放在res/values/strings.xml文件中
final String[] items = {"第1项", "第2项", "第3项", "第4项"};
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder listDialog = new AlertDialog.Builder(DialogActivity.this);
listDialog.setIcon(R.drawable.logo)//设置对话框图标
.setTitle("列表样式Dialog")//设置对话框标题
.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// which下标从0开始
Toast.makeText(DialogActivity.this,
"你点击了" + items[which],
Toast.LENGTH_SHORT).show();
}
})
.show();//调用show方法把对话框展示出来
}
});
(3)单选样式Dialog
//列表项最好是放在res/values/strings.xml文件中
final String[] items = {"第1项", "第2项", "第3项", "第4项"};
youchoice = -1;
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder singleChoiceDialog = new AlertDialog.Builder(DialogActivity.this);
singleChoiceDialog.setIcon(R.drawable.logo)//设置对话框图标
.setTitle("单选样式Dialog")//设置对话框标题
.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {//把列表项展示出来,默认选中第一项
@Override
public void onClick(DialogInterface dialog, int which) {
youchoice = which;
}
})
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (youchoice != -1) {
Toast.makeText(DialogActivity.this,
"你选择了" + items[youchoice],
Toast.LENGTH_SHORT).show();
}
}
})
.show();//调用show方法把对话框展示出来
}
});
(4)多选样式Dialog
final ArrayList<Integer> yourChoices = new ArrayList<>();
//列表项最好是放在res/values/strings.xml文件中
final String[] items = {"第1项", "第2项", "第3项", "第4项"};
//设置默认选中的选项,跟items一一对应起来
final boolean[] initChoiceSets={false,false,false,false};
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder multiChoiceDialog = new AlertDialog.Builder(DialogActivity.this);
multiChoiceDialog .setIcon(R.drawable.logo)//设置对话框图标
.setTitle("多选样式Dialog")//设置对话框标题
.setMultiChoiceItems(items, initChoiceSets, new OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
yourChoices.add(which);
} else {
yourChoices.remove(which);
}
}
})
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int size = yourChoices.size();
String str = "";
for (int i = 0; i < size; i++) {
str += items[yourChoices.get(i)] + " ";
}
Toast.makeText(DialogActivity.this,
"你选中了" + str,
Toast.LENGTH_SHORT).show();
}
})
.show();//调用show方法把对话框展示出来
}
});
(5)等待样式Dialog
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/* 等待Dialog具有屏蔽其他控件的交互能力
* @setCancelable 为使屏幕不可点击,设置为不可取消(false)
* 下载等事件完成后,主动调用函数关闭该Dialog
*/
ProgressDialog waitingDialog = new ProgressDialog(DialogActivity.this);
waitingDialog .setIcon(R.drawable.logo);//设置对话框图标
waitingDialog.setTitle("进度条等待样式Dialog");//设置对话框标题
waitingDialog.setMessage("等待中......");
waitingDialog.setIndeterminate(true);//设置ProgressDialog 的进度条是否不明确
waitingDialog.setCancelable(false);//设置
waitingDialog.show();//调用show方法把对话框展示出来
}
});
(6)进度条样式Dialog
final int MAX_PROGRESS = 100;
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/* 等待Dialog具有屏蔽其他控件的交互能力
* @setCancelable 为使屏幕不可点击,设置为不可取消(false)
* 下载等事件完成后,主动调用函数关闭该Dialog
*/
final ProgressDialog progressDialog = new ProgressDialog(DialogActivity.this);
progressDialog.setProgress(0);//设置初始进度
progressDialog.setTitle("进度条显示进度样式Dialog");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置进度条的样式为水平模式
progressDialog.setMax(MAX_PROGRESS);//设置进度条的最大值
progressDialog .show();//调用show方法把对话框展示出来
/* 模拟进度增加的过程
* 新开一个线程,每个100ms,进度增加1
*/
new Thread(new Runnable() {
@Override
public void run() {
int progress = 0;
while (progress < MAX_PROGRESS) {
try {
Thread.sleep(100);//休眠100ms
progress++;
progressDialog.setProgress(progress);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//进度达到最大值是,窗口消失
progressDialog.cancel();
}
}).start();
}
});
(7)可编辑样式Dialog
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final EditText editText = new EditText(DialogActivity.this);
AlertDialog.Builder inputDialog =
new AlertDialog.Builder(DialogActivity.this);
inputDialog.setTitle("可编辑样式Dialog")
.setView(editText);
inputDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogActivity.this,
editText.getText().toString(),
Toast.LENGTH_SHORT).show();
}
})
.show();
}
});
(8)自定义样式Dialog
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder customizeDialog =
new AlertDialog.Builder(DialogActivity.this);
final View dialogView = LayoutInflater.from(DialogActivity.this)
.inflate(R.layout.dialog_customize, null);
customizeDialog .setTitle("自定义样式Dialog")
.setView(dialogView)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 获取EditView中的输入内容
EditText editText = (EditText) dialogView.findViewById(R.id.edit_text);
Toast.makeText(DialogActivity.this,
editText.getText().toString(),
Toast.LENGTH_SHORT).show();
}
})
.show();
}
});
关于Dialog对话框,也可参考如下文章:
http://www.oschina.net/question/54100_32486
http://www.cnblogs.com/xiaoluo501395377/p/3419398.html
http://bbs.itheima.com/thread-219659-1-1.html