Android之自定义弹窗Dialog

忙了一周了,也该抽点时间写点儿东西.

Android之自定义弹窗Dialog_第1张图片

话不多说,书接上文(上文在哪儿?),开发项目中经常用到弹窗,比如,用户要退出app,咱们就给他一个弹窗(实际上用户不想看到~~~MDZZ),

Android之自定义弹窗Dialog_第2张图片
Android之自定义弹窗Dialog_第3张图片

代码如下

mDialog=new CustomDialog(this, "温馨提示", "确定要退出我们可爱的App吗?", "确定",new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mDialog.dismiss();
                        Toast.makeText(mContext,"退出了--伤心",Toast.LENGTH_LONG).show();
                    }
                },"取消");

话不多说,开始我们的表演(社会我鸡哥,人很话不多)

1,你需要给我们的弹窗设置个样式

多BB几句,多跟你的设计妹子交流交流,别一会儿这个样式,一会儿那个样式的,确定整个app的弹窗基调,这样咱们写这个才有意义,用户体验也更好一些.


这段代码应该在哪儿都应该知道吧.......,具体意思大家自己了解一下

2,你需要一个自定义弹窗的布局

custom_dialog_layout




    

        

        

        

        

            

            

            
        

    
    

dialog_back



    
    
    

back_text_selector_left



   
       
           
           

       
   
   
       
           
           

       
   

其他的背景自己写吧 .............

3,简单的核心逻辑

/**
 * Created by wangfei
 */

public class CustomDialog extends Dialog {
    private String title;
    private String content;
    private String buttonConfirm;
    private String buttonCancel;
    private View.OnClickListener confirmClickListener;
    private View.OnClickListener cancelClickListener;
    private static final int SHOW_ONE = 1;
    private int show = 2;

    public CustomDialog(Context context, String title, String content,
                        String buttonConfirm,
                        View.OnClickListener confirmClickListener) {
        super(context, R.style.Dialog);
        this.title = title;
        this.content = content;
        this.buttonConfirm = buttonConfirm;
        this.confirmClickListener = confirmClickListener;
        this.show = SHOW_ONE;
    }
    public CustomDialog(Context context, String title, String content,
                        String buttonConfirm,
                        View.OnClickListener confirmClickListener,String buttonCancel) {
        super(context, R.style.Dialog);
        this.title = title;
        this.content = content;
        this.buttonConfirm = buttonConfirm;
        this.buttonCancel = buttonCancel;
        this.confirmClickListener = confirmClickListener;
    }
    public CustomDialog(Context context, String title, String content,
                        View.OnClickListener confirmClickListener, String buttonConfirm, String buttonCancel) {
        super(context, R.style.Dialog);
        this.title = title;
        this.content = content;
        this.buttonConfirm = buttonConfirm;
        this.buttonCancel = buttonCancel;
        this.confirmClickListener = confirmClickListener;
    }

    public CustomDialog(Context context, String title, String content,
                        View.OnClickListener confirmClickListener, View.OnClickListener cancelClickListener, String
                                buttonConfirm, String buttonCancel) {
        super(context, R.style.Dialog);
        this.title = title;
        this.content = content;
        this.buttonConfirm = buttonConfirm;
        this.buttonCancel = buttonCancel;
        this.confirmClickListener = confirmClickListener;
        this.cancelClickListener = cancelClickListener;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.custom_dialog_layout);
        TextView dialog_title = (TextView) findViewById(R.id.dialog_title);
        TextView dialog_content = (TextView) findViewById(R.id.dialog_content);
        TextView dialog_confirm = (TextView) findViewById(R.id.dialog_confirm);
        TextView dialog_cancel = (TextView) findViewById(R.id.dialog_cancel);
        View dialog_line = findViewById(R.id.dialog_line);
        if (!TextUtils.isEmpty(title))
            dialog_title.setText(title);
        if (!TextUtils.isEmpty(content)) {
            dialog_content.setText(content);
        } else {
            dialog_content.setVisibility(View.GONE);
        }

        if (!TextUtils.isEmpty(buttonConfirm))
            dialog_confirm.setText(buttonConfirm);
        if (!TextUtils.isEmpty(buttonCancel))
            dialog_cancel.setText(buttonCancel);
        if (SHOW_ONE == show) {
            dialog_line.setVisibility(View.GONE);
            dialog_cancel.setVisibility(View.GONE);
            if (null != confirmClickListener) {
                dialog_confirm.setOnClickListener(confirmClickListener);
            }
            dialog_confirm.setBackgroundResource(R.drawable.back_text_selector);
        } else {
            if (null != confirmClickListener) {
                dialog_confirm.setOnClickListener(confirmClickListener);
            }
            if (null != cancelClickListener) {
                dialog_cancel.setOnClickListener(cancelClickListener);
            } else {
                dialog_cancel.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        CustomDialog.this.dismiss();
                    }
                });
            }

        }
    }

    public void setCanotBackPress() {
        this.setOnKeyListener(new OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
                    return true;
                }
                return false;
            }
        });
    }
}

4,使用方法

 mDialog=new CustomDialog(this, "温馨提示", "确定要退出我们可爱的App吗?", "确定",new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mDialog.dismiss();
                        Toast.makeText(LoginActivity.this,"退出了--伤心",Toast.LENGTH_LONG).show();
                    }
                });
                mDialog.setCanotBackPress();
                mDialog.setCanceledOnTouchOutside(false);
                mDialog.show();

这TMD不跟上面的一样吗?NONONO,too young too simple sometimes native

Android之自定义弹窗Dialog_第4张图片

效果如下

Android之自定义弹窗Dialog_第5张图片
setCanotBackPress() 
 设置屏蔽返回键

简而言之就是:你想实现啥样式就自己定义一个构造方法吧,根据自己的需求,比如设置字体的颜色之类的,自己处理一下逻辑


好了就到这儿吧,早上看了会儿TS6 ,LGD大优竟然被秘密翻盘了,真是哔了狗

你可能感兴趣的:(Android之自定义弹窗Dialog)