当TextView的大小发生变化时(通过文本更改或通过屏幕旋转更改宽度),我需要知道TextView的底部Y,以设置Google Maps视图的填充。下面不是真正的代码,只是简单的示例代码,只是为了演示问题。
TextView在另一个布局中,所以得到它的顶部返回0.但是当然,TextView在顶部布局中的顶部不是0.我已经尝试了下面的代码,但是我得到了零。
loc [0] = 0,loc 1 = 0
顶部= 0,身高= 86
另外,我不确定getLocationInWindow
是否正确。我的意思是,如果我的想法是正确的,可能包括AppBar?但是AppBar不在顶部布局中(例如,我的main_activity.xml中的RelativeLayout
),所以我认为我应该在顶部布局中获取位置,而不是在窗口中。在顶部布局中获取位置的正确方法是什么?
class MainActivity : AppCompatActivity(),
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var loc = IntArray(2);
tvAny.getLocationInWindow(loc);
tvAny.addOnLayoutChangeListener { v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom ->
val height = bottom - top;
Log.d("so", "loc[0] = " + loc[0] +", loc[1] = " + loc[1])
Log.d("so", "top = " + top +", height = " +height)
}
}
}
和activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:layout_margin="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tvAny"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#55FF0000"
android:text="I don't want any damn vegetables."/>
</FrameLayout>
</RelativeLayout>