Android - 防止 PopupWindow 之外的按钮点击

3

我花了一段时间尝试让它工作,查找了类似的解决方案,但是没有一个能够起作用。我需要我的PopupWindow只在点击生成按钮时才被关闭,而不是在窗口外单击时关闭。有人遇到过这个问题吗?

private void LoadRAMSPopup() {
    mainLayout.getForeground().setAlpha(150);
    LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);

    final View ramsView = layoutInflater.inflate(R.layout.popup_rams, null);
    final PopupWindow popupRAMS = new PopupWindow(
            ramsView,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
    );

    if (Build.VERSION.SDK_INT >= 21) {
        popupRAMS.setElevation(5.0f);
    }

    findViewById(R.id.mainLayout).post(new Runnable() {
        @Override
        public void run() {
            popupRAMS.showAtLocation(findViewById(R.id.mainLayout), Gravity.CENTER, 0, 0);
            popupRAMS.setOutsideTouchable(false);
            popupRAMS.setFocusable(true);
            popupRAMS.update();

            Button btnGenerate = (Button) ramsView.findViewById(R.id.btnGenerate);
            btnGenerate.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(getApplicationContext(), CreateRAMSActivity.class);
                    startActivity(intent);
                    popupRAMS.dismiss();
                    mainLayout.getForeground().setAlpha(0);
                }
            });
        }
    });
}
3个回答

8

设置 popupRAMS.setFocusable(false) 可以解决不必要的触摸操作来关闭弹出窗口。请进行替换。

popupRAMS.setFocusable(true);

使用

popupRAMS.setFocusable(false);

请尝试添加

popupRAMS.setOutsideTouchable(false);

希望这能对您有所帮助。


3
在一定程度上,这个方法可以防止弹出窗口被外部点击而关闭,然而我还需要防止弹出窗口所在区域下方的任何可点击元素被触发。 - jmckie
在这种情况下,我认为你的pop不会起作用。你必须使用单个布局文件来管理它。 - Rahul Sharma

0

我尝试了其他所有的解决方案,而对我有效的是在构造函数中设置“false”

mDiscountPopUp = new PopupWindow(discountPopUpView, WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.WRAP_CONTENT, false); // Creation of popup

0

试试这个

popupRAMS.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(context, android.R.color.transparent)));
popupRAMS.setOutsideTouchable(false);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接