Android View getLeft() 和 getTop() 研究

在今天的开发中,遇到了一个之前没有关注过的细节。那就是我用view.getTop()来获取view距离屏幕顶部高度,结果发现得到的数值和理论不一致。我们来举个例子吧,比如我们有如下的布局:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">


<LinearLayout
android:id="@+id/ll_01"
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="vertical"
android:background="@android:color/holo_green_light">

<TextView
android:id="@+id/tv_01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="我是第一行文字" />
</LinearLayout>

<LinearLayout
android:id="@+id/ll_02"
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="vertical"
android:background="@android:color/holo_blue_light">

<TextView
android:id="@+id/tv_02"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="我是第二行文字" />
</LinearLayout>

</LinearLayout>

上面是一个很简单的布局,UI效果图如下:

这里填写图片的描述

当我们用tv_01.getTop()的时候,得到的返回值是0,符合我的想象。但是用tv_02.getTop(),得到的值也为0。而我原以为tv_02.getTop()的值为ll_01的高度,也就是tv_02距离屏幕顶部的长度。但是结果和我的想象不一致。

后来我才知道原来getTop()方法返回的是该view距离父容器顶部的距离,所以理所应当tv_02.getTop()距离ll_02顶部的距离也为0了,同样的getLeft()getBottom()getRight()也是一个道理,以此类推。