首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用layout_height="0dp“获得真实的高度布局?

如何使用layout_height="0dp“获得真实的高度布局?
EN

Stack Overflow用户
提问于 2022-02-12 12:00:51
回答 1查看 108关注 0票数 0

我需要根据FrameLayout android:id="@+id/heart_strengthheight of FrameLayout android:id="@+id/heart_strength_background来设置FrameLayout android:id="@+id/heart_strength_background的高度,其高度设置如下:

代码语言:javascript
运行
复制
            <FrameLayout
                android:id="@+id/cardiogram_background_light"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginStart="@dimen/default_screen_margin"
                android:layout_marginTop="@dimen/chart_widget_margin_top"
                android:layout_marginEnd="@dimen/default_screen_margin"
                android:background="@drawable/chart_widget_background_light_gray"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHeight_percent="0.184"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/heart_rate_diagram_background_light" />

            <FrameLayout
                android:id="@+id/heart_strength_background"
                android:layout_width="@dimen/cardiogram_status_bar_width"
                android:layout_height="0dp"
                android:layout_marginEnd="@dimen/default_screen_margin"
                android:background="@drawable/chart_widget_background_dark_gray"
                app:layout_constraintBottom_toBottomOf="@+id/cardiogram_background_light"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="@+id/cardiogram_background_light" >

                <FrameLayout
                    android:id="@+id/heart_strength"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    app:heartStrength="@{viewmodel.heartStrengthLiveData}"
                    android:background="@drawable/chart_widget_background_light_gray"
                    android:backgroundTint="@color/turquoise"
                    android:layout_gravity="bottom"/>
            </FrameLayout>

当我试图获得heart_strength.parent布局的真实高度时:

代码语言:javascript
运行
复制
    @JvmStatic
    @BindingAdapter("app:heartStrength")
    fun setHeartStrengthViewHeight(bar: FrameLayout, level: Int) {
        val barParent = bar.parent as FrameLayout
        println("bar parent height: ${barParent.layoutParams.height}")
    }

我得到了0。我怎么知道实际高度?

我有一张卡片(cardiogram_background_light)。它的高度以%为单位动态变化。正因为如此,卡中的条形图的最大高度也会动态变化。以前,我将其高度设置为maxHeight * Value /100。但是现在maxHeight在不同屏幕大小上动态变化,我想知道它的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-12 13:25:15

这是因为在调用setHeartStrengthViewHeight时还没有绘制视图。要解决这个问题,请尝试以下方法:

代码语言:javascript
运行
复制
@JvmStatic
@BindingAdapter("app:heartStrength")
fun setHeartStrengthViewHeight(bar: FrameLayout, level: Int) {
    val barParent = bar.parent as FrameLayout

    val observer : ViewTreeObserver = barParent.viewTreeObserver
    observer.addOnGlobalLayoutListener(object: ViewTreeObserver.OnGlobalLayoutListener {
        override fun onGlobalLayout() {
            println("bar parent height: ${barParent.height}")
            barParent.viewTreeObserver.removeOnGlobalLayoutListener(this)
        }
    })

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71091664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档