마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

custom dialog 외부클릭시 cancel?? dismiss 되지 않는 이유

0 추천

아래와 같이 구성을 하였습니다.

백키를 누를경우 dismiss ? cancel이 되나
외부 영역을 클릭할 경우 종료가 되지 않았습니다.
어떻게 수정해야하는지 확인부탁드립니다.
 
AppCompatActivity에서 Custom dialog를 생성하였습니다.
 
mShoppingDialog = new DialogShopping(RecipeShoppingMemoActivity.this,
        getResources().getString(R.string.info),
        getResources().getString(R.string.shoppingmemo),
        leftShoppingClickListener,
        rightShoppingClickListener
);
mShoppingDialog.setCancelable(true);
mShoppingDialog.setCanceledOnTouchOutside(true);
mShoppingDialog.show();

 

public class DialogSave extends Dialog {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        WindowManager.LayoutParams lpWindow = new WindowManager.LayoutParams();
        lpWindow.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;
        lpWindow.dimAmount = 0.8f;
        getWindow().setAttributes(lpWindow);

        setContentView(R.layout.dialog_save);

        setLayout();
        setTitle(mTitle);
        setContent(mContent);
        setClickListener(mLeftClickListener , mRightClickListener);

    }

    public DialogSave(Context context) {
        // Dialog 배경을 투명 처리 해준다.
        super(context , android.R.style.Theme_Translucent_NoTitleBar);
    }

    public DialogSave(Context context , String title ,
                          View.OnClickListener singleListener) {
        super(context , android.R.style.Theme_Translucent_NoTitleBar);
        this.mTitle = title;
        this.mLeftClickListener = singleListener;
    }

    public DialogSave(Context context , String title , String content ,
                          View.OnClickListener leftListener , View.OnClickListener rightListener) {
        super(context , android.R.style.Theme_Translucent_NoTitleBar);
        this.mTitle = title;
        this.mContent = content;
        this.mLeftClickListener = leftListener;
        this.mRightClickListener = rightListener;
    }

    private void setTitle(String title){
        mTitleView.setText(title);
    }

    private void setContent(String content){
        mContentView.setText(content);
    }

    private void setClickListener(View.OnClickListener left , View.OnClickListener right){
        if(left!=null && right!=null){
            mLeftButton.setOnClickListener(left);
            mRightButton.setOnClickListener(right);
        }else if(left!=null && right==null){
            mLeftButton.setOnClickListener(left);
        }else if(left==null && right!=null ){
            mLeftButton.setOnClickListener(right);
        }else {

        }
    }

    private TextView mTitleView;
    private TextView mContentView;
    private Button mLeftButton;
    private Button mRightButton;

    private String mTitle;
    private String mContent;

    private View.OnClickListener mLeftClickListener;
    private View.OnClickListener mRightClickListener;

    /*
     * Layout
     */
    private void setLayout(){
        mTitleView = (TextView) findViewById(R.id.tv_title);
        mContentView = (TextView) findViewById(R.id.tv_content);
        mLeftButton = (Button) findViewById(R.id.bt_left);
        mRightButton = (Button) findViewById(R.id.bt_right);
    }
}

 

 
쿠쿠부다스 (6,470 포인트) 님이 2017년 9월 13일 질문

2개의 답변

0 추천

Dialog 를 상속해서 커스텀으로 만들다 보면 여러가지 문제들이 많이 발생하더라구요 저도 해결방법은 못찾음..

DialogFragment를 사용하시면 대부분의 문제가 해결되실겁니다.

 

http://www.androidbegin.com/tutorial/android-dialogfragment-tutorial/

Printf (1,380 포인트) 님이 2017년 9월 13일 답변
0 추천
확인하세요 https://developer.android.com/reference/android/app/Dialog.html#setCancelable(boolean)

일반적으로는 이 옵션으로 해결되어야 합니다.

커스텀 하셨으니 일단 dialog 사이즈가 full 사이즈인데 내부 content 에서 transparent 를 준게 아닌가요?
aucd29 (218,390 포인트) 님이 2017년 9월 13일 답변
...