Ответ 1
После взлома в течение нескольких часов, пробовав некоторые черные магические математики, чтобы вычислить центры и попытаться выровнять представление с помощью Gravity.TOP, я нашел сообщение, которое использовало Gravity.CENTER. Я собираю свои результаты здесь, надеясь, что он спасет кого-то еще от боли.
popupWindow.showAtLocation(anyViewOnlyNeededForWindowToken, Gravity.CENTER, 0, 0);
Вид необходим только для токена окна, он не оказывает другого влияния на местоположение.
Gravity сообщает менеджеру компоновки, где следует начинать систему координат и как обрабатывать эти координаты. Я не могу найти документы, но хакинг показывает мне, что:
- CENTER использует середину всплывающего окна для выравнивания по указанному x, y. Таким образом, 0,0 имеет ориентацию экрана, без корректировки размера панели уведомлений.
- BOTTOM использует нижнюю часть всплывающего окна для выравнивания с указанными x, y. Таким образом, 0,0 имеет выпадающее меню, выровненное со дном экрана. Если вы хотите заполнить 10px, тогда y = 10 (не -10), чтобы переместить всплывающее окно на 10 пикселей.
- TOP использует верхнюю часть всплывающего окна для выравнивания с указанными x, y. Таким образом, 0,0 имеет всплывающее окно, совпадающее с верхней частью экрана. Если вы хотите 10px padding, тогда y = 10. ПРИМЕЧАНИЕ Если вы не находитесь в полноэкранном режиме, вы также должны внести коррективы в панель уведомлений.
- Gravity.LEFT и Gravity.RIGHT теперь должны быть очевидны, поскольку для моих иллюстраций изображения они слишком велики, чтобы соответствовать на экране, поэтому они зажимаются до размера экрана минус заполнение, которое я использую.