系统的八大对话框
对话框使用注意事项:
- 修改对话框宽高的时候,要在dialog对话框show方法之后使用
- 修改dialog样式的方法
- 在style中写dialog的样式,一般如下:通过下面属性来改变dialog的背景色等
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item><!--边框-->
<item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
<item name="android:windowIsTranslucent">true</item><!--半透明-->
<item name="android:windowNoTitle">true</item><!--无标题-->
<item name="android:windowBackground">@android:color/transparent</item><!--背景透明-->
<item name="android:backgroundDimEnabled">true</item><!--模糊-->
<item name="android:windowFullscreen">true</item>
</style>
- 在创建对话框的时候引用该样式。
final AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.dialog);
1. 一般对话框
效果图
/**
* 一般对话框
*/
private void showNormalDialog() {
/* @setIcon 设置对话框图标
* @setTitle 设置对话框标题
* @setMessage 设置对话框消息提示
* setXXX方法返回Dialog对象,因此可以链式设置属性
*/
final AlertDialog.Builder normalDialog =
new AlertDialog.Builder(MainActivity.this);
normalDialog.setIcon(R.mipmap.ic_launcher);
normalDialog.setTitle("我是一个普通Dialog");
normalDialog.setMessage("你要点击哪一个按钮呢?");
normalDialog.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "确定", Toast.LENGTH_SHORT).show();
}
});
normalDialog.setNegativeButton("关闭",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "关闭", Toast.LENGTH_SHORT).show();
}
});
// 显示
normalDialog.show();
}
2. 带有三个按钮对话框
效果图
/**
* 三个按钮对话框
* setNeutralButton
*/
public void showMultiBtnDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("我是一个普通Dialog").setMessage("你要点击哪一个按钮呢?");
builder.setIcon(R.mipmap.ic_launcher);
builder.setNegativeButton("按钮1", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "按钮1", Toast.LENGTH_SHORT).show();
}
});
builder.setPositiveButton("按钮2", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "按钮2", Toast.LENGTH_SHORT).show();
}
});
builder.setNeutralButton("按钮3", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "按钮3", Toast.LENGTH_SHORT).show();
}
});
builder.create().show();
}
3. 列表对话框
效果图
/**
* 列表对话框
*/
private void showListDialog() {
final String[] items = {"我是1", "我是2", "我是3", "我是4", "我是1", "我是2", "我是3", "我是4", "我是1", "我是2", "我是3", "我是4"};
AlertDialog.Builder listDialog =
new AlertDialog.Builder(MainActivity.this);
listDialog.setTitle("我是一个列表Dialog");
listDialog.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// which 下标从0开始
// ...To-do
Toast.makeText(MainActivity.this,
"你点击了" + items[which],
Toast.LENGTH_SHORT).show();
}
});
AlertDialog dialog = listDialog.create();
dialog.show();
//以下这些代码时用来设置dialog的高度,一定要放在show方法之后。
WindowManager.LayoutParams attributes =
dialog.getWindow().getAttributes();
attributes.height = 400;
dialog.getWindow().setAttributes(attributes);
}
4. 单选对话框
/**
* 单选对话框
*/
int yourChoice;
private void showSingleChoiceDialog() {
final String[] items = {"我是1", "我是2", "我是3", "我是4"};
yourChoice = -1;
AlertDialog.Builder singleDialog = new AlertDialog.Builder(this);
singleDialog.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
yourChoice = which;
}
});
singleDialog.setNegativeButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (yourChoice != -1) {
Toast.makeText(MainActivity.this,
"你选择了" + items[yourChoice],
Toast.LENGTH_SHORT).show();
}
}
});
singleDialog.show();
}
5. 多选对话框
/**
* 多选对话框
*/
ArrayList<Integer> yourChoices = new ArrayList<>();
private void showMultiChoiceDialog() {
yourChoices.clear();
final String[] items = {"我是1", "我是2", "我是3", "我是4"};
AlertDialog.Builder multiChoiceDialog = new AlertDialog.Builder(this);
// 设置默认选中的选项,全为false默认均未选中
final boolean initChoiceSets[] = {false, false, false, false};
multiChoiceDialog.setTitle("我是一个多选Dialog");
multiChoiceDialog.setMultiChoiceItems(items, initChoiceSets, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
yourChoices.add(which);
} else {
yourChoices.remove(which);
}
}
});
multiChoiceDialog.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(MainActivity.this,
"你选中了" + str,
Toast.LENGTH_SHORT).show();
}
});
multiChoiceDialog.show();
}
6. 等待对话框
/**
* 等待对话框
*/
private void showWaitingDialog() {
/* 等待Dialog具有屏蔽其他控件的交互能力
* @setCancelable 为使屏幕不可点击,设置为不可取消(false)
* 下载等事件完成后,主动调用函数关闭该Dialog
*/
final ProgressDialog waitingDialog =
new ProgressDialog(MainActivity.this);
waitingDialog.setTitle("我是一个等待Dialog");
waitingDialog.setMessage("等待中...");
waitingDialog.setIndeterminate(true);
waitingDialog.setCancelable(false);
waitingDialog.show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
waitingDialog.dismiss();
Toast.makeText(MainActivity.this,
"加载数据完成",
Toast.LENGTH_SHORT).show();
}
}, 2000);
}
7. 进度条对话框
/**
* 进度条对话框
*/
private void showProgressDialog() {
/* @setProgress 设置初始进度
* @setProgressStyle 设置样式(水平进度条)
* @setMax 设置进度最大值
*/
final int MAX_PROGRESS = 100;
final ProgressDialog progressDialog =
new ProgressDialog(MainActivity.this);
progressDialog.setProgress(0);
progressDialog.setTitle("我是一个进度条Dialog");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMax(MAX_PROGRESS);
progressDialog.show();
/* 模拟进度增加的过程
* 新开一个线程,每个100ms,进度增加1
*/
new Thread(new Runnable() {
@Override
public void run() {
int progress = 0;
while (progress < MAX_PROGRESS) {
try {
Thread.sleep(50);
progress++;
progressDialog.setProgress(progress);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 进度达到最大值后,窗口消失
progressDialog.cancel();
}
}).start();
}
8. 编辑对话框
/**
* 编辑对话框
*
* @setView 装入一个EditView
*/
private void showInputDialog() {
final EditText et = new EditText(this);
AlertDialog.Builder inputDialog = new AlertDialog.Builder(this);
inputDialog.setTitle("我是可以输入的对话框");
inputDialog.setView(et);
inputDialog.setNegativeButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), et.getText().toString(), Toast.LENGTH_LONG).show();
}
});
inputDialog.show();
}
9. 常用自定义对话框
/**
* 常用自定义对话框1
*/
private void myDialogStyle1() {
final AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.dialog);
View view = View.inflate(this, R.layout.dialog_my1, null);
builder.setView(view);
view.findViewById(R.id.dialog_twobtn_btn_left).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,
"左边",
Toast.LENGTH_SHORT).show();
}
});
view.findViewById(R.id.dialog_twobtn_btn_right).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,
"右边",
Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
style样式:
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item><!--边框-->
<item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
<item name="android:windowIsTranslucent">true</item><!--半透明-->
<item name="android:windowNoTitle">true</item><!--无标题-->
<item name="android:windowBackground">@android:color/transparent</item><!--背景透明-->
<item name="android:backgroundDimEnabled">true</item><!--模糊-->
<item name="android:windowFullscreen">true</item>
</style>
10. 底部的对话框
/**
* 常用自定义对话框2 居于底部的对话框
*/
private void myDialogStyle2() {
final AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.dialog);
View view = View.inflate(this, R.layout.dialog_my2, null);
builder.setView(view);
AlertDialog dialog = builder.create();
dialog.show();
Window window = dialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
// lp.width = 1080;
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.BOTTOM;
window.setAttributes(lp);
// window.setBackgroundDrawableResource(android.R.color.transparent);
}
11. 全屏对话框
/**
* 全屏对话框
*/
private void myDialogStyle3() {
final AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.dialog2);
View view = View.inflate(this, R.layout.dialog_my3, null);
builder.setView(view);
AlertDialog dialog = builder.create();
dialog.show();
Window window = dialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
window.setAttributes(lp);
}
style样式:
<style name="dialog2" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item><!--边框-->
<item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
<item name="android:windowIsTranslucent">false</item><!--半透明-->
<item name="android:windowNoTitle">true</item><!--无标题-->
<item name="android:windowBackground">@android:color/white</item><!--背景透明-->
<item name="android:backgroundDimEnabled">false</item><!--模糊-->
<item name="android:windowFullscreen">true</item>
源码地址:
链接:http://pan.baidu.com/s/1jI0Qfqu 密码:7y94