Android自定义dialog

来源:互联网 发布:opengl编程指南 第9版 编辑:程序博客网 时间:2024/06/07 18:04

自定义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.需要什么布局和点击事件,可以自己添加


1 0