1 Star 0 Fork 0

AndroidUI/DialogDemo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
9年前
9年前
9年前
9年前
9年前
9年前
Loading...
README

Dialog

对话框分类 含义
Dialog 基类:非抽象
AlertDialog 提醒对话框
ProgressDialog 进度条对话框
Dialog背景色是黑色,这是因为style的原因:
<style name="AppBaseTheme"parent="android:Theme.Holo.Light.DarkActionBar">

这些对话框都继承自Dialog,API18:

见图: 这里写图片描述

Dialog常用的方法

方法 含义
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有此方法。

Dialog效果图

这里写图片描述 ##AlertDialog:基本对话框 ##

继承自Dialog,默认显示在屏幕中间,左右两边距离屏幕有间隔。

效果图:

这里写图片描述

相关的类

含义
AlertDialog 提醒对话框
AlertDialog.Builder 对话框构造器

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();
}

AlertDialog多选对话框

效果图:

这里写图片描述

Builder的相关的方法

方法 含义
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();
}

ProgressDialog:进度条对话框

分为线性和圆形,没有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();
}

自定义Dialog

需要自己设置布局

效果图:

这里写图片描述

相关

含义
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();
}

自定义Dialog:加 动画 + 设置宽高 + style

效果图:

这里写图片描述

相关

类: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
}

空文件

简介

取消

发行版

暂无发行版

贡献者 (1)

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/AndroidUI/DialogDemo.git
git@gitee.com:AndroidUI/DialogDemo.git
AndroidUI
DialogDemo
DialogDemo
master

搜索帮助