今天些项目的时候用到了一些dialog,记得以前写过一些自定义的dialog,今天总结了一下:总体上就在Android系统提供的dialog上添加不同的布局,然后实现他们的各种点击事件。
自定义dialog(没有添加布局)
public class CustomDialog { private Dialog dialog = null; private Activity mActivity; public CustomDialog(Context context) { this.mActivity = (Activity) context; } private CustomDialog create() { create(themeID); return this; } /** * 根据对话框主题设置对话框 * * @param theme * @return */ public CustomDialog create(int theme) { if (null == dialog && mActivity.isFinishing() == false) { dialog = new Dialog(mActivity, theme); } return this; } /** * 根据布局id设置布局 * * @param layoutResId * @return */ public CustomDialog setContentView(int layoutResId) { if (null == dialog) { create(); } dialog.setContentView(layoutResId); return this; } /** * 设置对话框布局,对话框展示的位置居中,大小自适应 * * @param view * @return */ public CustomDialog setContentView(View view) { setContentView(view, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT, Gravity.CENTER); return this; } /** * 设置对话框布局,对话框位置gravity,大小自适应 * * @param view * @param gravity * @return */ public CustomDialog setContentView(View view, int gravity) { setContentView(view, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT, gravity); return this; } /** * 设置对话框布局,大小,显示位置 * * @param view * @param width * @param height * @param gravity * @return */ public CustomDialog setContentView(View view, int width, int height, int gravity) { if (null == dialog) { create(); } dialog.setContentView(view); Window dlgWindow = dialog.getWindow(); WindowManager.LayoutParams wl = dlgWindow.getAttributes(); wl.width = width; wl.height = height; dlgWindow.setGravity(gravity); dlgWindow.setAttributes(wl); return this; } /** * 设置对话框是否允许外部点击取消 * * @param cancel * @return */ public CustomDialog setCanceledOnTouchOutside(boolean cancel) { if (null == dialog) { create(); } dialog.setCanceledOnTouchOutside(cancel); return this; } /** * 设置是否允许取消 * * @param isCancel * @return */ public CustomDialog setCancelable(boolean isCancel) { if (null == dialog) { create(); } dialog.setCancelable(isCancel); return this; } /** * 设置对话框取消监听 * * @param listener * @return */ public CustomDialog OnDismissListener(DialogInterface.OnDismissListener listener) { if (null == dialog) { create(); } if (null != listener) { dialog.setOnDismissListener(listener); } return this; } /** * 设置动画功能 * * @param resId * @return */ public CustomDialog setAnimations(int resId) { if (null == dialog) { create(); } dialog.getWindow().setWindowAnimations(resId); return this; } /** * 设置对话框显示监听 * * @param listener * @return */ public CustomDialog setOnShowListener(DialogInterface.OnShowListener listener) { if (null == dialog) { create(); } if (null != listener) { dialog.setOnShowListener(listener); } return this; } /** * 显示对话框 */ public void show() { // 如果没有最后一个条件,三星手机会挂掉 if (null != dialog && dialog.isShowing() == false && !mActivity.isFinishing()) { dialog.show(); } } /** * 关闭对话框 */ public void dismiss() { // 如果没有最后一个条件,三星手机会挂掉 if (null != dialog && dialog.isShowing() == false && !mActivity.isFinishing()) { dialog.dismiss(); } } /** * 对话框是否显示 * * @return */ public boolean isShowing() { if (null == dialog) return false; return dialog.isShowing(); } }
public class BaseDialog { protected CustomDialog dialog = null; protected Context context; protected LayoutInflater inflater; private Button btLeft, btRight; public Button getBtLeft() { return btLeft; } public Button getBtRight() { return btRight; } public TextView getTvTitle() { return tvTitle; } public LinearLayout getLinContext() { return linContext; } public LinearLayout getLinFunction() { return linFunction; } public View getvLineFunction() { return vLineFunction; } private TextView tvTitle; private LinearLayout linContext, linFunction; private View vLineFunction; /** * 添加内容布局 * @param view */ public void addContentView(View view) { linContext.removeAllViews(); linContext.addView(view); } public BaseDialog(Context context) { this.context = context; inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); init(context); } private void init(Context context) { View dialogView = inflater.inflate(R.layout.dialog_base, null); tvTitle = (TextView) dialogView.findViewById(R.id.dlg_base_txtTitle); linContext = (LinearLayout) dialogView.findViewById(R.id.dlg_base_linContent); linFunction = (LinearLayout) dialogView.findViewById(R.id.dlg_base_linFunction); btLeft = (Button) dialogView.findViewById(R.id.dlg_base_btnLeft); btRight = (Button) dialogView.findViewById(R.id.dlg_base_btnRight); btRight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); dialog = new CustomDialog(context).setContentView(dialogView, Gravity.CENTER).setCanceledOnTouchOutside(false); } public void show() { if (null != dialog) { dialog.show(); } } public void dismiss() { if (null != dialog) { dialog.dismiss(); } } public boolean isShow() { return dialog.isShowing(); } }