2015-11-05 58 views
0

我想在Android應用程序中創建一個PopupMenu。因爲該應用程序的主窗口使得只有極少使用的Android佈局元素(基本上是一個大的圖形),我使用在主活動以下代碼的:Android PopupMenu剪輯到ActionBar的邊界

public void showMenu() { 
    View v = this.getCurrentFocus(); 
    PopupMenu popup = new PopupMenu(this, v); 
    this.prepareMenu(popup.getMenu()); // populate menu with items 
    popup.show(); 
} 

的方法被調用時用戶觸摸屏幕的特定區域。

該菜單顯示在ActionBar的頂部,但不會超出其界限。我可以通過菜單滾動(因此項目在那裏),但我無法弄清楚如何讓菜單超出ActionBar的邊界。

該應用程序有一個全屏模式,它隱藏了ActionBar。當我這樣做時,菜單根本不顯示。日誌輸出顯示showMenu()在第一次觸摸時會被調用,但不會在第二次觸摸時被調用,表示菜單確實打開,儘管隱藏或不在屏幕上,並在第二次觸摸時被解散。

當我檢查由v.getMeasuredHeight()v.getMeasuredWidth()報告的值,我得到的東西接近我的設備的屏幕尺寸(高度取決於動作條可見性),這表明我處理佔據了屏幕的大部分景色。

我已經嘗試過用重力來修補(如PopupMenu popup = new PopupMenu(this, v, Gravity.RIGHT | Gravity.TOP | Gravity.FILL_VERTICAL);),但無濟於事。我可以將菜單位置從左上角切換到右上角,但大小始終相同。

我還試圖獲得以錨定菜單的各種方式,如

Window window = this.getWindow(); 
while ((window != null) && (window.getContainer() != null)) 
    window = window.getContainer(); 
View v = window.getDecorView(); 

但唯一不同的是,對於一些意見菜單沒有顯示在所有。當它這樣做時,它總是延伸到ActionBar的整個高度,並始終在最下端剪切。

什麼給?

回答

0

我想我找到了這種行爲的一個可能的原因。顯然PopupMenu從不阻礙其相關的視圖。因爲在我的情況下,相關的視圖會佔用整個空間,只留下菜單的ActionBar。當操作欄被隱藏時,實際上沒有地方放置菜單。

因此,解決方案將創建一個虛擬視圖作爲菜單的錨點。有兩種可能性:

  • 浮動在主視圖頂部的透明視圖。這將允許將菜單虛擬放置在主視圖的任何位置,唯一的限制是它不能與頂部或底部邊緣對齊(因爲錨會將它與邊緣分開)。

  • 放置在主視圖邊緣的高度或寬度爲零的視圖。這將使菜單與相應的邊緣對齊。使用重力,菜單可以放置在主視圖的一個角落。雖然我不確定Android是否允許視圖的尺寸爲零。

我需要做一些更多的測試才能找到答案。

+0

原來,有一種更簡單的方法來實現我想要的 - 特別是顯示選項菜單。我沒有創建一個具有相同內容的彈出菜單,而是我可以簡單地從Activity中調用'openOptionsMenu()'。菜單將顯示在默認位置,這對我來說可以,並且可能會沿着整個屏幕高度(不包括系統欄)進行擴展。 – user149408