Неправильные координаты из getLocationOnScreen/getLocationInWindow
Вызов getLocationOnScreen()
или getLocationInWindow()
дает мне координату top/Y
, которая примерно равна ~ 30px (высота строки состояния/уведомлений) слишком далеко вниз. Координата left/X
отключена.
Как я намекнул выше, я считаю, что разница в том, что это строка состояния/уведомления... Я могу ошибаться. Я думаю, что могу решить эту проблему, если я могу определить размер панели уведомлений, но у меня возникают проблемы с этим.
Любая помощь будет принята с благодарностью.
Ответы
Ответ 1
Я решил решить эту проблему, указав высоту строки состояния/уведомления следующим образом:
View globalView = ...; // the main view of my activity/application
DisplayMetrics dm = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(dm);
int topOffset = dm.heightPixels - globalView.getMeasuredHeight();
View tempView = ...; // the view you'd like to locate
int[] loc = new int[2];
tempView.getLocationOnScreen(loc);
final int y = loc[1] - topOffset;
Ответ 2
Вот как мне нравится получать высоту строки состояния и корректировать смещение:
final int[] location = new int[2];
anchor.getLocationInWindow(location); // Includes offset from status bar, *dumb*
Rect anchorRect = new Rect(location[0], location[1],
location[0] + anchor.getWidth(), location[1] + anchor.getHeight());
anchor.getRootView().findViewById(android.R.id.content).getLocationInWindow(location);
int windowTopOffset = location[1];
anchorRect.offset(0, -windowTopOffset);
Ответ 3
У меня такая же проблема, попробуйте использовать
offset = myView.GetOffsetY();
и настройте координату Y на это значение, например
coordY -= offset;
Класс, который предлагает `` -метод:
class MyView extends View {
public int GetOffsetY() {
int mOffset[] = new int[2];
getLocationOnScreen( mOffset );
return mOffset[1];
}
}
Ответ 4
Этот ответ не включает в себя, как получить высоту строки состояния, но он объясняет поведение getLocationOnScreen()
и getLocationInWindow()
, возвращающее то же значение.
В случае нормальной активности (а не диалога) вы должны ожидать, что эти два метода возвратят одно и то же значение. Окно располагается под (как в координатах z-order not y) в строке состояния, поэтому эти методы не могут использоваться для определения высоты строки состояния.
fooobar.com/info/24438/...