PopupWindow находится над строкой состояния на некоторых устройствах

Вот мой код для отображения PopupWindow

View rootView = activity.getWindow().getDecorView().getRootView();
mPopupWindow.showAtLocation(rootView, Gravity.NO_GRAVITY, 0, 0);

Когда я тестирую его на Samsung, Nexus устройстве, он отображается под строкой состояния
Однако, когда я тестирую его на Sony устройстве, он отображается над строкой состояния (как на изображении ниже)

Итак, какое устройство отображает правильно или что я делаю неправильно? Любая помощь или предложение будут очень признательны

введите здесь описание изображения


person Linh    schedule 03.01.2017    source источник


Ответы (1)


Я решаю свою проблему, создавая temp View в top-left (topLeftView в приведенном ниже коде).
Затем, когда я показываю PopupWindow, я показываю его в (0, the y coordinate of topLeftView), а не (0,0)

View topLeftView = findViewById(R.id.top_left_View);
int topLeftPos[] = new int[2];
topLeftView.getLocationOnScreen(topLeftPos);

mPopupWindow.showAtLocation(topLeftView, Gravity.NO_GRAVITY, 0, topLeftPos[1]);

Я думаю, что это решение будет работать для всех устройств

person Linh    schedule 04.01.2017
comment
Похоже, что вариант Android на устройствах Sony вычисляет верхний левый угол как физический верхний левый угол, в то время как устройства Nexus и Samsung вычисляют верхний левый угол, исключая строку состояния. - person ucsunil; 04.01.2017