我有一个TableLayout,其单元格中有视图。触摸其中一种视图时,我尝试使用view.getTop()。问题在于,无论我按哪个视图,它都会返回2getLeft()有效-它给了我正确的值,但没有给我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值。

10-07 19:27
查看更多