开发中我们会经常用到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; } }
最后我们在activity中使用
private CustomDialog customDialog; customDialog = DialogUtil.loading(mContext,handler);//显示
customDialog.CloseDialog();//关闭这样就完成了