我在单元格中有TableLayout
个视图。触摸其中一个视图时,我尝试使用view.getTop()
。问题是,无论我按哪个视图,都会返回2
。 getLeft()
有效 - 它为我提供了正确的值,但不是getTop()
。 getBottom()
的行为方式也相似,但改为122
。
答案 0 :(得分:1)
问题是,无论我按哪个视图,都会返回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
方法,也可以使用获得x的父getTop()
的{{1}}值来偏移单元格视图的getTop()
值, y相对于TableRow
小部件的值。