不正确的坐标来自getLocationOnScreen / getLocationInWindow

调用getLocationOnScreen()getLocationInWindow()都会给我一个约为30px(状态/通知栏的高度)的top/Y坐标。 left/X坐标死了。

正如我上面所暗示的,我认为不同之处在于状态/通知栏…我可能是错的。 如果我能确定通知栏的大小,我想我可以解决这个问题,但是我很难做到这一点。

任何帮助将不胜感激。

我最终通过确定状态/通知栏的高度来解决此问题,如下所示:

 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; 

我有同样的问题,尝试使用

 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顺序不是y坐标)放置状态栏,所以这些方法不能用来确定状态栏的高度。

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

这里是我如何获得状态栏的高度,并调整偏移量:

 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);