Android自定义dialog

自定义Dialog

今天些项目的时候用到了一些dialog,记得以前写过一些自定义的dialog,今天总结了一下:总体上就在Android系统提供的dialog上添加不同的布局,然后实现他们的各种点击事件。

1.下面开始添加代码:

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

}

2.添加自定义布局

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

}
 

3.需要什么布局和点击事件,可以自己添加


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