当视图发生变化时,在顶部布局中获取最低位置

时间:2018-06-12 13:12:04

标签: android android-layout

当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>

截图: enter image description here

0 个答案:

没有答案