对于TableLayout中的所有视图,getTop()返回2

时间:2013-10-27 09:31:42

标签: android android-view tablelayout

我在单元格中有TableLayout个视图。触摸其中一个视图时,我尝试使用view.getTop()。问题是,无论我按哪个视图,都会返回2getLeft()有效 - 它为我提供了正确的值,但不是getTop()getBottom()的行为方式也相似,但改为122

1 个答案:

答案 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小部件的值。