1

TableLayout在单元格中有意见。当触及其中一个视图时,我尝试使用view.getTop(). 问题是这会返回2我按下的任何视图。getLeft()有效 - 它给了我正确的值,但不是getTop(). getBottom()也以类似的方式表现,但返回122

4

1 回答 1

1

问题是,无论我按哪个视图,这都会返回 2。

这些getTop/Left/Right/Bottom()方法是相对于父级的,这意味着返回的值是相对于父级边界(成为子视图坐标系的轴)的。a 中的单元格视图TableLayout具有作为父级 a TableRow。它的顶部TableRow转换为通过调用其中一个孩子0返回的 y 值。getTop()在您的情况下,这是 2,因为您可能在单元格视图上设置了一个小的边距/填充。

那么为什么 getLeft() 会为每个点返回不同的值呢?

这并没有什么特别之处。的左侧TableRow转换为 的 ax 值0,下一个孩子的 ax 值为 0 + 前一个孩子的宽度,依此类推。对于高度,您看不到这一点,因为您在那个方向只有一个孩子。

这是与此方法相关的 View 类的文档中的一小段引述:

“可以通过调用 getLeft() 和 getTop() 方法来检索视图的位置。前者返回代表视图的矩形的左坐标或 X 坐标。后者返回顶部坐标或 Y 坐标代表视图的矩形。这些方法都返回视图相对于其父视图的位置。例如,当 getLeft() 返回 20 时,这意味着视图位于其直接父视图的左边缘右侧 20 像素处。”

您可以使用其中一种方法,也可以使用获取相对于小部件的 x、y 值的父值getLocationInScreen/Window来偏移getTop()单元格视图的值。getTop()TableRowTableLayout

于 2013-10-27T14:18:08.290 回答