Я пытаюсь создать PopupMenu в приложении для Android. Так как главное окно приложения делает только минимальное использование элементов макета 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()
, я получаю что-то близкое к размеру экрана устройства (высота варьируется в зависимости от видимости ActionBar), указывая я имею дело с тем, что занимает большую часть экрана.
Я пробовал трястись с гравитацией (например, 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 и всегда обрезается в нижнем конце.
Что дает?
Оказывается, есть гораздо более простой способ добиться того, что я хотел - в частности, чтобы показать меню «Параметры».Вместо того, чтобы создавать всплывающее меню с тем же контентом, я обнаружил, что могу просто вызвать 'openOptionsMenu()' из Activity. Меню будет отображаться в позиции по умолчанию, что для меня нормально, и оно будет расширяться потенциально по всей высоте экрана (за исключением системных баров). – user149408