当前位置: 首页 > 知识库问答 >
问题:

getLocationOnScreen()vs getLocationInWindow()

柯昱
2023-03-14

在这两种方法的上下文中,screen和view有什么区别?

我有一个按钮,我想得到它中心的x坐标。

public int getButtonXPosition() {
    return (button.getLeft()+button.getRight())/2;
}

共有1个答案

轩辕风华
2023-03-14

我认为这个答案不正确。如果我创建了一个新项目,并通过添加以下代码片段只编辑MainActivity:

public boolean dispatchTouchEvent(MotionEvent ev) {
    View contentsView = findViewById(android.R.id.content);

    int test1[] = new int[2];
    contentsView.getLocationInWindow(test1);

    int test2[] = new int[2];
    contentsView.getLocationOnScreen(test2);

    System.out.println(test1[1] + " " + test2[1]);

    return super.dispatchTouchEvent(ev);
}

我将看到打印到控制108 108。这是使用运行4.3的Nexus7。我使用运行android版本2.2的模拟器也有类似的结果。

正常的活动窗口将使用FILL_PARENTxFILL_PARENT作为其WindowManager.LayoutParams,这导致它们的布局与整个屏幕的大小相同。窗口位于statusbar和其他装饰物下面(关于Z顺序,而不是Y坐标),所以我相信一个更准确的图表是:

|--phone screen-----activity window---| 
|--------status bar-------------------| 
|                                     | 
|                                     | 
|-------------------------------------| 

所以,总结一下:一个正常活动的窗口充满了整个屏幕,甚至状态栏和装饰物下的空间。这两个方法将返回相同的x和y坐标。只有在特殊情况下,如窗口实际偏移的对话框中,这两个值才会不同。

 类似资料:

相关问答

相关文章

相关阅读