对getLocationOnScreen()
或getLocationInWindow()
的调用都会给我一个约{30}的top/Y
坐标(状态/通知栏的高度)太远了。 left/X
坐标已经死了。
正如我上面所暗示的那样,我认为差异是由于状态/通知栏...我可能是错的。如果我能确定通知栏的大小,我想我可以解决这个问题,但是,我很难做到这一点。
非常感谢任何帮助。
答案 0 :(得分:81)
我最终通过确定状态/通知栏的高度来解决这个问题,如下所示:
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;
答案 1 :(得分:7)
以下是我喜欢获取状态栏高度的方法,并调整偏移量:
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);
答案 2 :(得分:5)
我遇到同样的问题,请尝试使用
offset = myView.GetOffsetY();
并按该值调整Y坐标,例如
coordY -= offset;
提供``-method:
的类class MyView extends View {
public int GetOffsetY() {
int mOffset[] = new int[2];
getLocationOnScreen( mOffset );
return mOffset[1];
}
}
答案 3 :(得分:4)
此答案不包括如何获取状态栏高度,但它确实解释了getLocationOnScreen()
和getLocationInWindow()
返回相同值的行为。
在正常活动(不是对话框)的情况下,您应该期望这两种方法返回相同的值。窗口在下面(如z顺序而非y坐标)布局状态栏,因此这些方法不能用于确定状态栏的高度。