下にスライドしたdialogをカスタマイズ

3645 ワード

目的:終了、下部からのスライド、スライドアウトのためのカスタムdialogを実現
解決する問題:
1.dialogの位置は最後まで修正しなければならない.
2.dialogにはデフォルトのpaddingがあり、これらのpaddingに行って、dialogを画面と同じ幅にします.(これはGravity.widthの設定ではできません)
3.dialogのスライドインとスライドアウトアニメーション;(styleにはenterとexitアニメーション属性があります)
ソリューション:
例:LogoutDialogクラスから継承されたLogoutDialogを書く
質問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