我有一个TableLayout
,其单元格中有视图。触摸其中一种视图时,我尝试使用view.getTop()
。问题在于,无论我按哪个视图,它都会返回2
。 getLeft()
有效-它给了我正确的值,但没有给我getTop()
。 getBottom()
的行为也类似,但返回122
。
最佳答案
问题是无论我按哪个视图,它都将返回2。getTop/Left/Right/Bottom()
方法是相对于父级的,这意味着返回的值是相对于父级边界的(它们成为子视图的坐标系的轴)。 TableLayout
中的单元格视图具有TableRow
作为父级。该TableRow
的顶侧转换为通过在子级之一上调用0
返回的getTop()
y值。在您的情况下为2,因为您可能在单元格视图上设置了较小的边距/边距。
那么为什么getLeft()为每个点返回不同的值呢?
这没有什么特别的。 TableRow
的左侧转换为x值0
,下一个子项的x值为0 +上一个子项的宽度,依此类推。对于身高,您看不到这个高度,因为您在那个方向上只有一个孩子。
以下是与此方法相关的View类文档的一小段引文:
“可以通过调用方法getLeft()和getTop()来检索视图的位置。前者返回表示视图的矩形的左坐标或X坐标。后者返回代表坐标的顶部或Y坐标。这两个方法都返回视图相对于其父视图的位置,例如,当getLeft()返回20时,这意味着该视图位于其直接父视图左边缘的右侧20个像素处”。
您可以使用getLocationInScreen/Window
方法之一,也可以使用父getTop()
的getTop()
值偏移单元格视图的TableRow
值,以获得相对于TableLayout
小部件的x,y值。