Неверные координаты из getLocationOnScreen / getLocationInWindow



вызов getLocationOnScreen() или getLocationInWindow() оба дают мне top/Y координата, которая составляет около ~30px (высота строки состояния/уведомлений) слишком далеко вниз. Элемент left/X координата включена.



как я уже намекал выше, я считаю, что разница из-за состояния/панели уведомлений... Я могу ошибаться. Я думаю, что смогу решить эту проблему, если смогу определить размер панели уведомлений, но у меня возникли проблемы с этим.



любая помощь будет высоко оценили.

393   4  

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), поэтому эти методы нельзя использовать для определения высоты состояния бар.

https://stackoverflow.com/a/20154562/777165

Comments

    Ничего не найдено.