【问题标题】:Android - Prevent button click outside of PopupWindowAndroid - 防止在 PopupWindow 之外单击按钮
【发布时间】:2020-08-20 21:09:42
【问题描述】:

我花了一段时间试图让它工作,在网上寻找类似的解决方案,但似乎没有一个工作。我需要我的 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);
                }
            });
        }
    });
}

【问题讨论】:

    标签: android popupwindow


    【解决方案1】:

    设置 popupRAMS.setFocusable(false)。消除使弹出窗口消失所需的不必要的触摸。所以请更换

    popupRAMS.setFocusable(true);
    

    popupRAMS.setFocusable(false);
    

    也尝试添加

    popupRAMS.setOutsideTouchable(false);
    

    希望对你有所帮助。

    【讨论】:

    • 这在一定程度上有效,因为它不允许在外部点击时关闭弹出窗口,但是我还需要防止下面视图中的所有内容都可以点击弹出窗口在顶部的。
    • 在这种情况下,我认为你的流行音乐不会奏效。您必须使用单个布局文件来管理它。
    【解决方案2】:

    试试这个

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        使用

        dialog_obj.setCancelable(false)
        

        【讨论】:

        • 虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加 context 将改善答案的长度长期价值。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。提及为什么这个答案比其他答案更合适也没有什么坏处。
        • 根本不起作用。 PopupWindow 甚至没有 setCancelable 方法。
        猜你喜欢
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-16
        • 1970-01-01
        相关资源
        最近更新 更多