2017-04-06 140 views
1

我花了一段时间试图让这个工作,在网上寻找类似的解决方案,但似乎没有工作。我需要我的PopupWindow只在点击生成按钮时被解雇,而不是通过在窗口外单击。任何人都遇到过这个问题?Android - 防止按钮点击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

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

popupRAMS.setFocusable(true); 

popupRAMS.setFocusable(false); 

也尝试添加

popupRAMS.setOutsideTouchable(false); 

希望它会帮助你。

+0

此作品在一定程度上,因为它不允许弹出窗口上点击外面被解雇,但我还需要防止一切在可点击的下方的视图中,弹出窗口位于顶部。 – James

+0

在这种情况下,我不认为你的流行音乐会奏效。你必须用一个布局文件来管理这个。 –

+0

这将如何实现?从来没有这样做... – James

0

使用

dialog_obj.setCancelable(false) 
+0

虽然这段代码可能回答这个问题,提供额外的[上下文](https://meta.stackexchange.com/q/114762)有关_how_和/或_why_它解决了这个问题将改善答案的长期价值。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请[编辑](http://stackoverflow.com/posts/43256046/edit)您的答案添加一个解释,并指出适用的限制和假设。它也不会提到为什么这个答案比其他答案更合适。 –

+0

根本不起作用。 'PopupWindow'甚至没有'setCancelable'方法。 – HughHughTeotl

0

试试这个

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