【问题标题】:How can I find the actual width of a view if the XML width attribute is declared as "0dp"? [duplicate]如果 XML 宽度属性声明为“0dp”,如何找到视图的实际宽度? [复制]
【发布时间】:2019-06-24 23:36:35
【问题描述】:

我有一个 EditText,它在约束布局中具有开始和结束约束,以及在 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 中调用它在我的 MainActivity 中 - 如果是这种情况,我应该在哪里尝试调用宽度?

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    一种简单但肯定有缺点的方法是使用View.post (Runnable r)

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

    当然还有其他方法,但我认为这是一种简单的方法。尤其是使用 kotlin(和扩展),您可以这样做

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

    【讨论】:

    • 我对 Android 开发还很陌生——你能解释一下为什么 View.post (Runnable r) 有它的缺点吗?
    • 我不能给你一个理由,但有些人似乎在这里有问题。有关您可以使用的更多选项,请参阅 this excellent answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2015-02-09
    • 1970-01-01
    • 2012-11-23
    • 2020-10-05
    • 2016-04-06
    • 2014-04-18
    相关资源
    最近更新 更多