Как сделать так, чтобы высота MapView учитывала строку состояния Android?

У меня есть интерактивные значки на карте, показывающие PopupWindow чуть выше значка при нажатии. Однако, если значок находится в верхней части карты, PopupWindow будет скрыт под строкой состояния Android. PopupWindow автоматически настраивается на правый и левый края экрана, а также на верхний край, но не принимает во внимание панель строки состояния.

Либо должен быть способ разместить высоту MapView, либо атрибут PopupWindow, который учитывает строку состояния. Конечно, всегда можно добавить верхнее поле фиксированного размера, но верхняя панель имеет разную высоту на разных устройствах Android.

Может кто-нибудь помочь с этим? Спасибо!


person Vanja    schedule 13.08.2010    source источник
comment
Не реальное решение, а идея: вы можете центрировать свою карту на объекте, по которому щелкнули, прежде чем показывать всплывающее окно. Это может решить вашу проблему?   -  person Sephy    schedule 13.08.2010
comment
Я просто предполагаю, но разве размер строки состояния не одинаков на всех устройствах, если измерять его в провалах?   -  person Federico klez Culloca    schedule 13.08.2010
comment
Я не хочу менять центр карты, так как это может раздражать пользователя. Но спасибо за идею. Размер строки состояния Android зависит от этого сообщения: stackoverflow.com/questions/3407256/   -  person Vanja    schedule 13.08.2010


Ответы (1)


Я до сих пор не нашел способа отрегулировать высоту MapView в строке состояния Android, что, к сожалению.

Однако в случае с PopupWindow достаточно знать высоту строки состояния Android, поскольку кодировщик размещает ее на экране. Затем кодировщик может разработать свою собственную стратегию для решения проблемы.

Согласно другому сообщению, вот как это можно сделать:

Rect rectgle = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
statusBarHeight = rectgle.top;

Однако позаботьтесь о том, чтобы не выполнять этот расчет до тех пор, пока все компоненты окна не будут инициализированы, поскольку в противном случае он будет равен нулю. Это легко заметить и исправить.

БР, Ваня

person Vanja    schedule 26.10.2010