2016-06-20 188 views
0

我有一個帶有PopupWindow的片段。我用以下代碼啓動Popup:當外部點擊時關閉PopupWindow在

private PopupWindow createPopup; 

    private void initiateWindow(){ 
     try { 
      LayoutInflater inflater = (LayoutInflater) getActivity() 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View layout = inflater.inflate(R.layout.window_popup, 
        (ViewGroup) v.findViewById(R.id.popup_element)); 
      DisplayMetrics displaymetrics = new DisplayMetrics(); 
      getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
      int height = displaymetrics.heightPixels; 
      int width = displaymetrics.widthPixels; 


      createPopup = new PopupWindow(layout, width/2 + width/4, height/3, true); 
      createPopup.showAtLocation(layout, Gravity.CENTER, 0, 0); 


} catch (Exception e) { 
     e.printStackTrace(); 
     } 
     } 

它運行得很好。我想在外部點擊時關閉窗口。這是一件很平常的事情,所以關於互聯網上的話題有很多教程和問題。問題是 - 他們都無法工作。

我試過使用createPopup.setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT)); createPopup.setOutsideTouchable(true); createPopup.setFocusable(true); 和類似answers

我還檢查了是否可以使用此createPopup.setBackgroundDrawable(newColorDrawable(Color.BLACK));填充純色彈出框後面的所有內容,以驗證我是否有錯誤的核心代碼,但它也沒有幫助 - 與彈出佈局無關的所有內容都保持可見狀態。

+0

它會自動關閉時點擊它之外。不是沒有關閉? –

+0

不,它不。 –

+0

好的沒問題什麼彈出窗口包含什麼視圖textviews? –

回答

0

關閉彈出窗口時,在它之外的觸摸 - 當失去專注

createPopup.setOutsideTouchable(true); 
createPopup.setFocusable(true); 

刪除默認的黑色背景

createPopup.setBackgroundDrawable(new ShapeDrawable()); 

如果ShapeDrawable() didt工作中使用這一

createPopup.setBackgroundDrawable(new BitmapDrawable()); 

Same thread

+0

我已經試過這種方法。我試圖添加黑色背景來檢查它是否確實存在背景 - 這不是不幸的。 –

+0

see here http://stackoverflow.com/questions/12232724/popupwindow-dismiss-when-clicked-outside –

+0

我已經把它鏈接到我的問題 –

0

創建一個新的xml樣式,如下所示。

<style name="AppTheme.PopupWindow"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowCloseOnTouchOutside">true</item> 
</style> 

創建主題後需要做的所有事情是將其應用於清單中的fragmentactivity。

<activity android:name=".PopupWindow" android:theme="@style/AppTheme.PopupWindow"></activity> 
+0

.java類是'Fragment'而不是'FragmentActivity'。它沒有在清單中聲明。 –