对话框分类 | 含义 |
---|---|
Dialog | 基类:非抽象 |
AlertDialog | 提醒对话框 |
ProgressDialog | 进度条对话框 |
Dialog背景色是黑色,这是因为style的原因:
<style name="AppBaseTheme"parent="android:Theme.Holo.Light.DarkActionBar">
这些对话框都继承自Dialog,API18:
见图:
方法 | 含义 |
---|---|
setContentView(View or resId) | 填充布局 |
findViewById(resId) | 找到布局中的控件,可以用dialog调用 |
setTitle(character char) | 设置比提提 |
setIcon(resId) | 设置图标 |
show() | 显示 |
dismiss() | 消失:从屏幕中移除 |
hide() | 隐藏 |
isShow() | dialog是否正在显示 |
getWindow() | 得到当前dialog所在的activity的窗体 |
类Dialog是没有方法:setMessage(charseQuence char),但是子类AlertDialog + ProgressDialog有此方法。
##AlertDialog:基本对话框 ##
继承自Dialog,默认显示在屏幕中间,左右两边距离屏幕有间隔。
类 | 含义 |
---|---|
AlertDialog | 提醒对话框 |
AlertDialog.Builder | 对话框构造器 |
方法 | 含义 |
---|---|
setPositiviButton(String ,DialogInterface.onClickListener(..)) | 设置确定按钮 |
setNogetiveButton(String ,DialogInterface.onClickListener(..)) | 设置取消按钮 |
setMessage(charseQuence char) | 设置dialog内容 |
crete() | 创建dialog对象 |
// 普通对话框
private void initAlertDialog() {
Builder builder = new AlertDialog.Builder(context);
builder.setTitle("更新提示");
builder.setMessage("这是知乎最新版本,请更新!");
builder.setIcon(R.drawable.ic_launcher);
builder.setPositiveButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showShortToast(context, "确定" + which);
// dialog.dismiss();//可以不调用dismiss(),dialog会自动消失
}
});
builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showShortToast(context, "取消" + which);
// dialog.dismiss();可以不调用dismiss(),dialog会自动消失
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
AlertDialog的方法setNegativeButton(CharSequence text, OnClickListener listener) + setPositiveButton(CharSequence text, OnClickListener listener) + setPositiveButton(CharSequence text, OnClickListener listener) 会自动调用dialog的dismiss(),除此之外均如果需要让dialog消失,都必须调用dismiss().
设置单选对话框和多选对话框时,不能调用方法setMessage(charseQuence char),否则选择列表不会显示。
##AlertDialog:单选对话框 ##
类 | 含义 |
---|---|
setSingleChoiceItems(CharSequence[] items, int checkedItem, OnClickListener listener) | 设置单选对话框 |
items | 所有选项 |
checkedItem | 默认选中哪一个,-1:默认都没选 |
private void initSingleChoiceDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("标题");
// builder.setMessage("message--message");//设置message就没有了单选列表
builder.setIcon(R.drawable.ic_launcher);
final String[] items = new String[] { "item1", "item2", "item3", "item4", "item5" };
final boolean[] checkedItem = new boolean[]{false,false,false,false,false};
builder.setSingleChoiceItems(items, -1,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
checkedItem[which] = true;
ToastUtil.showShortToast(context, items[which]);
dialog.dismiss();// 点击单选按钮,dialog不会自动消失
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
方法 | 含义 |
---|---|
setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, OnMultiChoiceClickListener listener) | 多选方法 |
参数 | 含义 |
items | 多选列表的内容 |
checkedItems | ,默认选中的内容 |
###点开dialog显示上一次退出时选中的按钮### |
把checkedItems 的创建放在类中,作为类变量。
private void initMultiChoiceDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Title");
// builder.setMessage("message--message");//设置message就没有了单选列表
builder.setIcon(R.drawable.ic_launcher);
items = new String[] { "item1", "item2", "item3", "item4", "item5" };
final boolean[] checkedItems = new boolean[] { false, false, false,
false, false };
builder.setMultiChoiceItems(items, checkedItems,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
ToastUtil.showShortToast(context, items[which]);
}
});
builder.setPositiveButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showShortToast(context, "取消");
// dialog.dismiss();//可以不调用dismiss(),dialog会自动消失
}
});
builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < checkedItems.length; i++) {
if (checkedItems[i]) {
sb.append(items[i]);
}
}
ToastUtil.showShortToast(context, "确定" + sb.toString());
// dialog.dismiss();可以不调用dismiss(),dialog会自动消失
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
分为线性和圆形,没有Builder.
类 | 含义 |
---|---|
setProgressStyle(int style) | 设置进度条样式 |
setMax(int max) | 进度最大值 |
setProgress(int value) | 设置当前进度 |
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 水平线进度条
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);// 圆形进度条
private void initProgressDialog() {
final ProgressDialog dialog = new ProgressDialog(context);
dialog.setTitle("Title");//设置标题
dialog.setMessage("message----message");//设置dialog内容
dialog.setIcon(R.drawable.ic_launcher);//设置图标,与为Title左侧
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 水平线进度条
// dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//圆形进度条
dialog.setMax(100);//最大值
new Thread() {
public void run() {
for (int i = 0; i <= 100; i++) {
SystemClock.sleep(50);
dialog.setProgress(i);//每隔50毫秒设置当前进度
}
dialog.dismiss();// for执行完成后dialog默认不消失
};
}.start();
dialog.show();
}
需要自己设置布局
类 | 含义 |
---|---|
window | 窗体 |
方法 | 含义 |
setGravity(int gravity) | 设置窗体位置 |
--- | --- |
类 | 含义 |
Dialog | |
方法 | 含义 |
requestWindowFeature(int featureId) | 窗体的title是否显示 |
private void initCustomDialog() {
final Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉dialog的title,放在设置布局前
dialog.setContentView(R.layout.custom_dialog);
dialog.getWindow().setGravity(Gravity.BOTTOM);
Button btn_ok = (Button) dialog.findViewById(R.id.btn_ok);
Button btn_cancle = (Button) dialog.findViewById(R.id.btn_cancle);
btn_ok.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
btn_cancle.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
类:Window
方法 | 含义 |
---|---|
方法 | 含义 |
setGravity(int gravity) | 设置窗体位置 |
getAttributes() | 获取当前窗体的参数 |
setAttributes(LayoutParams a) | 设置窗体宽高 |
setWindowAnimations(int resId) | 给窗体添加动画 |
类:Dialog
方法 | 含义 |
---|---|
requestWindowFeature(int featureId) | 窗体的title是否显示 |
setCanceledOnTouchOutside(boolean cancel) | 点击dialog意外的区域,dialog是否消失 |
//设置 宽 + 高
LayoutParams params = window.getAttributes();//获取当前窗体的参数
view.measure(0, 0);
params.width = getResources().getDisplayMetrics().widthPixels;
params.height = view.getMeasuredHeight();//不设置高的话,dialog会充满屏幕,下方是白色,即使在布局中设置了高的具体值
window.setAttributes(params);
window.setWindowAnimations(R.style.DialogAnimationStyle);
DialogAnimationStyle:
<style name="DialogAnimationStyle" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/dialog_enter</item>
<item name="android:windowExitAnimation">@anim/dialog_exit</item>
</style>
dialog_enter.xml:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromYDelta="100%" >
</translate>
dialog_exit.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:toYDelta="100%" >
</translate>
private void initCustomDialog2() {
final Dialog dialog = new Dialog(context , R.style.MyStyle);//去掉dialog的title,dialog区域外是灰色
// dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉dialog的title,放在设置布局前
View view = View.inflate(context, R.layout.custom_dialog2, null);
dialog.setContentView(view);
dialog.setCanceledOnTouchOutside(true);//点击dialog意外的区域,dialog是否消失
Window window = dialog.getWindow();//创建当前窗体
window.setGravity(Gravity.BOTTOM);//当前床底位于底部
//添加动画
window.setWindowAnimations(R.style.DialogAnimationStyle);
//设置 宽 + 高
LayoutParams params = window.getAttributes();//获取当前窗体的参数
view.measure(0, 0);
params.width = getResources().getDisplayMetrics().widthPixels;
params.height = view.getMeasuredHeight();//不设置高的话,dialog会充满屏幕,下方是白色,即使在布局中设置了高的具体值
window.setAttributes(params);
Button btn_camera = (Button) dialog.findViewById(R.id.btn_camera);
Button btn_gallery = (Button) dialog.findViewById(R.id.btn_gallery);
Button btn6_cancle = (Button) dialog.findViewById(R.id.btn6_cancle);
btn_camera.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.showShortToast(context, "btn_camera");
dialog.dismiss();
}
});
btn_gallery.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.showShortToast(context, "btn_gallery");
dialog.dismiss();
}
});
btn6_cancle.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.showShortToast(context, "btn6_cancle");
dialog.dismiss();
}
});
dialog.show();//显示dialog
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。