参考文章
http://www.open-open.com/lib/view/open1329891315389.html
http://www.oschina.net/question/54100_32486
1. 基本的dialog写法
AlertDialog.Builder builder = new Builder(MainActivity.context);
builder.setMessage("确认删除吗?");
builder.setTitle("提示");
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setNegativeButton("取消", null);
builder.create().show();
效果
AlertDialog.Builder属性
- setTitle: 为对话框设置标题 ;
- setIcon : 为对话框设置图标;
- setMessage: 为对话框设置内容;
- setView : 给对话框设置自定义样式 ;
- setItems: 设置对话框要显示的一个list,一般用于显示几个命令时;
- setMultiChoiceItems:用来设置对话框显示一系列的复选框;
- setNeutralButton : 响应中立行为的点击;
- setPositiveButton : 响应Yes/Ok的点击 ;
- setNegativeButton :响应No/Cancel的点击 ;
- create : 创建对话框 ;
- show : 显示对话框;
2. 单选、多选和列表对话框
使用setSingleChoiceItems和setMultiChoiceItems以及setItems可以实现单选,多选,列表对话框,但要注意的是,此时不能使用setMessage方法,否则会显示不出来。
代码:
AlertDialog.Builder builder = new Builder(activity);
builder.setTitle("提示");
builder.setSingleChoiceItems(new String[]{"item1","item2"}, 0, null);//单选
// builder.setMultiChoiceItems(new String[]{"item1","item2"}, new boolean[]{true,false}, null);//多选
// builder.setItems(new String[]{"item1","item2"}, null);//列表
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setNegativeButton("取消", null);
builder.create().show();
效果:
单选
多选
3. 自定义样式
通过setView可以为dialog设置自定义的样式,其参数既可以为单个控件,也可以为视图容器,以实现复杂的布局。
代码:
LayoutInflater inflater = activity.getLayoutInflater();
View layout = inflater.inflate(R.layout.dialog_newtype,
(ViewGroup)findViewById(R.id.id_newproject_ll));
EditText newProjectet=(EditText) layout.findViewById(R.id.id_newproject_et);
new AlertDialog.Builder(this).setTitle("增加类型").setView(layout)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
})
.setNegativeButton("取消", null).show();
效果
4. 进度条dialog
进度条dialog要使用ProgressDialog。
ProgressDialog属性
- setProgressStyle: 设置进度条风格,风格为圆形,旋转的;
- setTitlt: 设置ProgressDialog 标题;
- setMessage: 设置ProgressDialog提示信息;
- setIcon: 设置ProgressDialog标题图标;
- setIndeterminate: 设置ProgressDialog 的进度条是否不明确;
- setCancelable: 设置ProgressDialog 是否可以按返回键取消;
- setButton: 设置ProgressDialog 的一个Button(需要监听Button事件);
- show: 显示ProgressDialog。
圆形进度条
代码
ProgressDialog mProgressDialog = new ProgressDialog(activity);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); //设置进度条风格,风格为圆形,旋转的
mProgressDialog.setTitle("读取ing...");// 设置ProgressDialog标题
mProgressDialog.setMessage("正在读取中请稍候...");// 设置ProgressDialog提示信息
mProgressDialog.setIndeterminate(true);//设置ProgressDialog 的进度条不明确
mProgressDialog.setCancelable(true);// 设置ProgressDialog 可以按退回键取消
mProgressDialog.setButton("确定", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
// 这里添加点击后的逻辑
}
});
mProgressDialog.show();// 让ProgressDialog显示
效果
条形进度条
代码
mProgressDialog.setTitle("进度条窗口");// 设置ProgressDialog标题
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置进度条风格,风格为长形
mProgressDialog.setMax(100);// 设置ProgressDialo进度条进度
mProgressDialog.setButton("确定", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
// 这里添加点击后的逻辑
}
});
mProgressDialog.setButton2("取消", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
// 这里添加点击后的逻辑
}
});
mProgressDialog.show();
new Thread()
{
@Override
public void run()
{
int Progress = 0;
while (Progress < 100)
{
try
{
mProgressDialog.setProgress(Progress++);
//mProgressDialog.incrementProgressBy(1);
Thread.sleep(100);
} catch (Exception e)
{
// TODO Auto-generated catch block
mProgressDialog.cancel();
//e.printStackTrace();
}
}
};
}.start();
效果
5. 保持dialog不被关闭
为了保证dialog在点击按钮后不被关闭,可以在点击事件中添加如下代码,注意Field导入java.lang.reflect.Field这个包:
//用于不关闭对话框
try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, false);
} catch (Exception e) {
e.printStackTrace();
}
添加上述代码后就可以使dialog无法关闭,在你需要关闭的地方,添加:
try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, true);
} catch (Exception e) {
e.printStackTrace();
}