如果XML width属性声明为“ 0dp”,如何找到视图的实际宽度?

时间:2019-06-24 23:36:35

标签: android kotlin

我有一个EditText,它在Constraint Layout中具有开始和结束约束,并且在XML中带有用“ 0dp”声明的宽度。我试图弄清楚一旦应用程序启动后如何获得EditText的宽度,因为0dp允许EditText在遵守起始/结束约束的同时在整个屏幕上伸展。

我尝试调用editText.measuredWidtheditText.layoutParams.width,但是它们的宽度均为0

<EditText
            android:id="@+id/editText"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:layout_marginEnd="20dp"
            android:layout_marginStart="10dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toEndOf="@+id/textBox"
            app:layout_constraintEnd_toEndOf="parent"
            android:dropDownWidth="match_parent"
            android:background="@android:color/black"/>

我怀疑此结果是由于我在onCreate的{​​{1}}中调用它的原因-如果是这种情况,我应该在哪里调用宽度?

1 个答案:

答案 0 :(得分:0)

使用View.post (Runnable r)

是一种简单的方法,但肯定也有缺点。

当确定了视图的大小后,将在视图膨胀后执行指定的可运行对象。然后,调用view.getWidth()应该返回正确的结果。

当然还有其他方法,但是我认为这是一种简单的方法。尤其是对于Kotlin(和扩展程序),您可以做到

view.post {
    //do sth with view.getWidth() here
}