2013-05-29 84 views
14

我正在開發Android應用程序,當用戶單擊屏幕底部的特定菜單欄對象(由水平排列的小圖像組成)時,我正在使用彈出窗口。Android - 在特定視圖上方的PopupWindow

點擊我希望彈出窗口被錨定到被點擊並顯示在頂部的視圖的左上角。

,似乎是相關的唯一的方法是showAsDropDown(查看錨,INT XOFF,INT YOFF)showAtLocation(查看父,INT重力,INT的x,int y)對。 showAsDropDown的問題在於它錨定在視圖的左下角。

有沒有另外一種方法來實現呢?

回答

25

popupWindow.showAtLocation(...)實際顯示絕對定位的屏幕(甚至沒有應用程序)的窗口。該調用中的錨僅用於其窗口令牌。座標是偏離給定的重力。

你真的想使用什麼是:

popupWindow.showAsDropDown(anchor, offsetX, offsetY, gravity); 

此調用僅在API 19+可用,所以在早期版本中,你需要使用:

popupWindow.showAsDropdown(anchor, offsetX, offsetY); 

這些來電顯示彈出窗口相對於指定的錨點視圖。需要注意的是默認的重力(沒有指定重力打電話時)是Gravity.TOP|Gravity.START所以如果你明確在你的應用各個景點使用Gravity.LEFT你將有一個壞的時間:)

+1

這就是我正在尋找的那個。您需要計算的是根據您使用的UI元素的偏移量。 – Alpaslan

5

你想使用的是showAtLocation(...)。您可以指定錨點視圖(用戶點擊的視圖),並通過gravity參數和偏移量將其定位。想像gravity參數,就像PopupWindow幾乎就像一個子視圖一樣,父視圖就像一個容器佈局。

您應該可以將Gravity.LEFT | Gravity.TOP作爲參數。

+7

沒有這樣的運氣,PopupWindow會用該行顯示窗口的左上角(popupWindow.showAsLocation(anchor,Gravity.TOP | Gravity.LEFT,0,0))。 – 2014-04-18 18:50:00

1

popupwindow.showAsDropDown(anchor,0,-125); 這件事爲我工作

6
popupWindow.showAtLocation(anchor, Gravity.BOTTOM, 0, anchor.getHeight()); 
3

您只需要通過高度移動popupWindow其錨點使用showAsDropDown(View anchor,int xoff,int yoff)語法中的yoff參數。

popupWindow.showAsDropDown(anchor, 0, -anchor.getHeight()+popupView.getHeight); 

另外,請注意,如果允許錨定的最大高度不允許進行轉換,則彈出窗口可能無法正確顯示。

+0

請詳細說明此代碼如何回答問題(此答案位於低質量帖子審閱隊列中)。 – JAL

3

我有這樣的代碼:PopupWindow在特定視圖(Gravity End)下的所有sdk版本。

 // display the popup[![enter image description here][1]][1] 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
      mPopupWindow.showAsDropDown(v, 0, 0, Gravity.END); 
     } else { 
      mPopupWindow.showAsDropDown(v, v.getWidth() - mPopupWindow.getWidth(), 0); 
     } 

這裏查看v是ImageButton日曆。

相關問題