Неверные координаты из getLocationOnScreen / getLocationInWindow
вызов getLocationOnScreen() или getLocationInWindow() оба дают мне top/Y координата, которая составляет около ~30px (высота строки состояния/уведомлений) слишком далеко вниз. Элемент left/X координата включена.
как я уже намекал выше, я считаю, что разница из-за состояния/панели уведомлений... Я могу ошибаться. Я думаю, что смогу решить эту проблему, если смогу определить размер панели уведомлений, но у меня возникли проблемы с этим.
любая помощь будет высоко оценили.
4 ответов:
Я решил эту проблему, определив высоту строки состояния / уведомления следующим образом:
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;
вот как мне нравится получать высоту строки состояния и настраивать смещение:
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);
у меня такая же проблема, попробуйте использовать
offset = myView.GetOffsetY();и отрегулируйте свою координату Y по этому значению, например
coordY -= offset;класс, который предлагает ` - метод:
class MyView extends View { public int GetOffsetY() { int mOffset[] = new int[2]; getLocationOnScreen( mOffset ); return mOffset[1]; } }
этот ответ не включает в себя, как получить высоту строки состояния, но он объясняет поведение
getLocationOnScreen()иgetLocationInWindow()возвращает то же значение.в случае обычной деятельности (не диалог) вы должны ожидать, что эти два метода вернут одно и то же значение. Окно располагается под строкой состояния (как в координатах z-order not y), поэтому эти методы нельзя использовать для определения высоты состояния бар.
Comments