android-自定义Dialog

来源:互联网 发布:java棕色rgb 编辑:程序博客网 时间:2024/06/04 14:03

开发中我们会经常用到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() {@Overridepublic 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();}@Overridepublic 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) {@Overridepublic void initListener() {}};customDialog.show();return customDialog;}}

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

最后我们在activity中使用

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









0 0