2017-04-07 62 views
0

我花了大量時間試圖解決這個問題,我自己也在這裏尋找解決方案,但沒有一個解決方案適用於我。Android - 在彈出窗口可見時禁用父視圖點擊事件

我目前的情況是當出現一個彈出窗口時我想禁用彈出窗口下方的前景視圖上的所有可點擊事件。

if (Shared.InspectionData.JobViewModel.RAMS_Id == null || Shared.InspectionData.JobViewModel.RAMS_Id.equals("")) { 
     // Disable foreground view here 

     LoadRAMSPopup(); 
} 



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.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); 
       } 
      }); 
     } 
    }); 
} 
+0

將你的'popupRAMS.setOutsideTouchable(false);'放在你的'findViewById(R.id.mainLayout).post(new Runnable(){' – Strider

+0

'這是行不通的。 – James

回答

0

搭搭Akshay Mukadam搭便車Disabling all child views inside the layout。我微調了一下,包括啓用我的觀點。

public static void disableEnableViews(ViewGroup layout) { 
    layout.setEnabled(false); 
    for (int i = 0; i < layout.getChildCount(); i++) { 
     View child = layout.getChildAt(i); 
     if (child instanceof ViewGroup) { 
      disableEnableViews((ViewGroup) child); 
     } else { 
      if(child.isEnabled()){ 
       child.setEnabled(false); 
      } else { 
       child.setEnabled(true); 
      } 
     } 
    } 
} 

只要給你的頂視圖一個id,引用它,然後放入方法。

相關問題