Android - 在PopupWindow外部单击防止按钮

时间:2017-04-06 12:51:55

标签: android popupwindow

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

4 个答案:

答案 0 :(得分:4)

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

popupRAMS.setFocusable(true);

popupRAMS.setFocusable(false);

还尝试添加

popupRAMS.setOutsideTouchable(false);

希望它会帮助你。

答案 1 :(得分:0)

使用

dialog_obj.setCancelable(false)

答案 2 :(得分:0)

试试这个

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

答案 3 :(得分:0)

我尝试了所有其他解决方案,但后来起作用的解决方案是在构造函数上设置“ false”

>Compiling CUDA source file hough.cu...
1>  
1>C:\dev\Test>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin\nvcc.exe" -gencode=arch=compute_52,code=\"sm_52,compute_52\" --use-local-env -ccbin "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\HostX86\x64" -x cu   -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include"  -G   --keep-dir x64\Debug -maxrregcount=0  --machine 64 --compile -cudart static  -g   -DWIN32 -DWIN64 -D_DEBUG -D_CONSOLE -D_WINDLL -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Fdx64\Debug\vc142.pdb /FS /Zi /RTC1 /MDd " -o x64\Debug\hough.cu.obj "C:\dev\Test\test.cu"  
1>test.cu