在弹出窗口外按下时关闭自定义弹出窗口

时间:2017-10-22 10:27:46

标签: android dialog android-popupwindow

我在android中使用对话框创建自定义弹出窗口。使用自定义弹出窗口时,我使用取消按钮关闭它。但现在我想通过触摸弹出窗口来关闭它。怎么样?

到目前为止我一直在尝试

private void showDetails() {
    final Dialog dialog = new Dialog(mContext, android.R.style.Theme_Translucent);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.popup_base_menu);
    dialog.setCanceledOnTouchOutside(true);

    text_cancel = (TextView) dialog.findViewById(R.id.text_cancel);
    txt_create_group_chat = (TextView) dialog.findViewById(R.id.txt_create_group_chat);
    txt_create_chat = (TextView) dialog.findViewById(R.id.txt_create_chat);
    txt_create_chatroom = dialog.findViewById(R.id.txt_create_chatroom);

    text_cancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dialog.dismiss();

        }
    });

    txt_create_group_chat.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent in = new Intent(mContext, CreateGroupChat.class);
            startActivity(in);
            dialog.cancel();
        }
    });
    txt_create_chat.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent in = new Intent(mContext, SearchActivity.class);
            startActivity(in);
            dialog.cancel();
        }
    });
    txt_create_chatroom.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent in = new Intent(mContext, CreateChatroomActivity.class);
            startActivity(in);
            dialog.cancel();
        }
    });

    dialog.show();

}

2 个答案:

答案 0 :(得分:0)

使用

setCanceledOnTouchOutside(true)

请参阅Android开发人员documentation

使用AlertDialog.Builder创建显示here的对话框。此类提供与使用的Dialog相同的构造函数参数。

此外,此问题已有answer

答案 1 :(得分:0)

在显示对话框之前需要进行三项更改:

 dialog.setCanceledOnTouchOutside(true);
 setCancelable(boolean)

可能有用的最后一件事是转到布局popup_base_menu并将根视图heightwidth更改为:

 wrap_content

应该代替match_parent。 应在dialog.show();

之前调用所有此更改