2014-03-13 161 views
0

我想知道如何一旦用戶點擊外面關閉POP_UP窗口,我在PopupWindow - Dismiss when clicked outside但沒有任何運氣一看,我試圖代碼:如何在外部點擊時關閉彈出窗口?

pw.setBackgroundDrawable(null); 
pw.setOutsideTouchable(true); 
pw.setTouchInterceptor(new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) 
      { 
      if(event.getAction() == MotionEvent.ACTION_OUTSIDE) 
       { 
        pw.dismiss(); 
        return true; 
       } 
      return false; 
     } 
    }); 
+0

我想你忘了在使用'onTouch(....)'方法之前添加'@ Override'。試試這種方法'@Override public boolean onTouch(View v,MotionEvent event){........}' –

回答

1

試試這個out.Hope它的工作原理:)

解決方案1:

popupWindow.setFocusable(true); 
popupWindow.update(); 

如果不要work.Then你可以嘗試了這一點。

解決方案2:

您可以使用dialog.setCanceledOnTouchOutside(true);如果你觸摸對話外,將關閉對話框。

喜歡的東西,

Dialog dialog = new Dialog(context) 
    dialog.setCanceledOnTouchOutside(true); 

或者,如果您的對話框在非模式的話,

1 - 設置標誌,FLAG_NOT_TOUCH_MODAL您對話的窗口屬性

Window window = this.getWindow(); 
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 

2 - 添加窗口屬性的另一個標誌,FLAG_WATCH_OUTSIDE_TOUCH - 這是一個對話框,用於在其可見區域外接收觸摸事件。

3 - 覆蓋onTouchEvent()對話框並檢查操作類型。如果動作類型爲「MotionEvent.ACTION_OUTSIDE」,則表示用戶正在對話區域之外進行交互。因此,在這種情況下,您可以減少對話或決定要執行的操作。查看文本打印

public boolean onTouchEvent(MotionEvent event) 
{ 

     if(event.getAction() == MotionEvent.ACTION_OUTSIDE){ 
     System.out.println("TOuch outside the dialog ******************** "); 
       this.dismiss(); 
     } 
     return false; 
} 
1

確定如此修復到底。

首先製作了彈出窗口位於相對佈局上的主要佈局。然後在頂部放置一個全屏幕空白布局,使其看不見且透明。

然後顯示在顯示的彈出窗口,設置全屏幕面板可見與setVisibility(View.VISIBLE);和隱藏時彈出隱藏與setVisibility(View.GONE);

還需要從觸摸聽者(停止觸摸返回true的佈局事件傳遞迴主佈局):

blocker.setOnTouchListener(new OnTouchListener() { 
@Override 
public boolean onTouch(View v, MotionEvent event) { 
return true; 
} 
}); 

,並給予彈出窗口的屬性:

setTouchable(true); 
setOutsideTouchable(false); 

乾杯

+0

這是一個精確的複製粘貼[This SO answer](http://stackoverflow.com/ a/8398317/1682559)...這與OP所要求的相反.. –

0

你不應該將BackgroundDrawable設置爲null,因爲這會殺死OnTouchListener; 您應該用pw.setBackgroundDrawable(new BitmapDrawable())替換pw.setBackgroundDrawable(null);

+0

'BitmapDrawable()'已棄用 – MRefaat

0

更好地使用對話框Fragment。它用於彈出功能,並在默認情況下按下對話框Fragment或使用硬後退按鈕關閉。

相關問題