android-自定义Dialog

开发中我们会经常用到dialog,但是系统每次使用的时候去写,又会觉得很麻烦,所以就把dialog提出来,写成一个公共的,再公用的dialog类中使用,传入一些参数,就可以使用了

首先我们先创建一个CustomDialog.java文件,继承Dialog

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;

public abstract class CustomDialog extends Dialog {
	public Context context;
	Dialog dialog;

	public CustomDialog(Context context, int layout, int style) {
		super(context, style);
		setContentView(layout);
		this.context = context;
		dialog = this;
		Window window = getWindow();
		WindowManager.LayoutParams layoutParams = window.getAttributes();
		layoutParams.width = LayoutParams.MATCH_PARENT;
		layoutParams.height = LayoutParams.MATCH_PARENT;
		layoutParams.gravity = Gravity.CENTER;
		window.setAttributes(layoutParams);
		setCanceledOnTouchOutside(false);
		setCancelable(false);
		setOnKeyListener(new OnKeyListener() {

			@Override
			public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
				if (keyCode == KeyEvent.KEYCODE_BACK) {
					return true;
				} else {
					return false; // 默认返回 false
				}
			}
		});
		initListener();
		if (!(context instanceof Activity)) {
			getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
		}
	}

	public abstract void initListener();

	@SuppressWarnings("unused")
	private float getDensity(Context context) {
		Resources resources = context.getResources();
		DisplayMetrics dm = resources.getDisplayMetrics();
		return dm.density;
	}

	public void CloseDialog() {
		dialog.dismiss();
	}

	@Override
	public void onBackPressed() {
		CloseDialog();
	}

}

可以看到,代码中我重写了onBackPressed,又去监听用户是否按下手机的返回键,这里会有一中情况,就是在dialog显示的时候,我们不希望用户点击返回键的时候关闭我们的dialog,所以这两者在使用的时候用根据情况来使用

而定义的initListener方法,是为了有些需要在dialog进行操作开发的,比如说点击时间,图片的修改之类

layoutid是我们写好的xml布局,style是dialog呈现的方式,渐变啊,由上而下等

然后我们定义一个DialogUtil的公共方法,这里把我们会展示的dialog集中,使用的时候,调用该方法就可以了

public class DialogUtil {
	
	public static CustomDialog loading(Context context,Handler handler){
		CustomDialog customDialog = new CustomDialog(context,R.layout.loading,R.style.Dialog) {
			
			@Override
			public void initListener() {
			}
		};
		customDialog.show();
		return customDialog;
	}

	
}

这里传得handler是为了把某些操作传给当前界面,比如说我一个时间的dialog,点击确认之后,在界面上显示我选择的时间信息

最后我们在activity中使用

private CustomDialog customDialog;
customDialog = DialogUtil.loading(mContext,handler);//显示
customDialog.CloseDialog();//关闭
这样就完成了









你可能感兴趣的:(android,dialog)