代码之家  ›  专栏  ›  技术社区  ›  Damn Vegetables

当视图发生更改时,获取顶部布局中的底部位置

  •  1
  • Damn Vegetables  · 技术社区  · 6 年前

    我需要知道一个文本视图的底部Y,当它的大小改变时(通过文本改变或通过屏幕旋转改变宽度),来设置Google Maps视图的填充。下面不是真正的代码,而是一个简单的示例代码,只是为了演示这个问题。

    TextView位于另一个布局中,因此获取其顶部将返回0。但当然,TextView的顶部布局不是0。我试过下面的代码,但是我得到了0。

    位置[0]=0,位置 1 =0个

    顶部=0,高度=86

    另外,我不确定 getLocationInWindow 是对的。我是说,如果我的想法是正确的,那可能包括AppBar?但是AppBar在顶层布局之外(例如, 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 回复  |  直到 6 年前