自定义底部滑出的dialog

目的:实现一个自定义dialog,用于退出,从底部滑入和滑出

要解决的问题:

1.dialog的位置要修改到底部;

2.dialog有默认的padding,要去这些padding,让dialog于屏幕同宽;(这个无法通过设置Gravity.width办到)

3.dialog的滑入和滑出动画;(style中有enter和exit Animation属性)

解决方案:

示例:写一个LogoutDialog继承自Dialog类

关于问题1和2:

    Window window = this.getWindow();
    
    //去掉dialog的title,要在setContentView()前
    window.requestFeature(Window.FEATURE_NO_TITLE);
    
    setContentView(R.layout.layout_logout_confirm);
    
    //去掉dialog默认的padding
    window.getDecorView().setPadding(0, 0, 0, 0);
    
    WindowManager.LayoutParams lp = window.getAttributes();
    lp.width = WindowManager.LayoutParams.MATCH_PARENT;
    lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
    
    //设置dialog的位置在底部
    lp.gravity = Gravity.BOTTOM;
    
    window.setAttributes(lp);

给dialog加入动画

    给dialog设置一个style,在style中设置,也可以在代码中写(但是相对繁琐)。
    
    WindowManager.LayoutParams lp = window.getAttributes();
    lp.windowAnimations = R.style.MyDialogAnimation;//设置Animation,style中做了设置,此处可不写

style :




anim :

dialog_slide_down:





dialog_slide_up:





完整代码:

public class MyLogoutConfirmDialog extends Dialog implements View.OnClickListener {
    @ViewInject(id = R.id.logout_dialog_exit, click = true)
    RelativeLayout exitButton;

    @ViewInject(id = R.id.logout_dialog_cancel, click = true)
    RelativeLayout cancelButton;

    MyDialogClickListener myDialogClickListener;

    public MyLogoutConfirmDialog(Context context, MyDialogClickListener myDialogClickListener) {
        super(context, R.style.MyDialogStyle);
        this.myDialogClickListener = myDialogClickListener;
        init();
    }

    private void init() {
        Window window = this.getWindow();
        window.requestFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.layout_logout_confirm);
        ViewInjectUtils.initInjectedView(this, window.getDecorView());
        window.getDecorView().setPadding(0, 0, 0, 0);
        WindowManager.LayoutParams lp = window.getAttributes();
        lp.windowAnimations = R.style.MyDialogAnimation;
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
        lp.gravity = Gravity.BOTTOM;
        window.setAttributes(lp);
        show();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.logout_dialog_exit:
                dismiss();
                myDialogClickListener.exit();
                break;
            case R.id.logout_dialog_cancel:
                dismiss();
                break;
        }
    }

    public interface MyDialogClickListener {
        void exit();
    }

}

THE END

你可能感兴趣的:(自定义底部滑出的dialog)