我需要根據 的 設定高度FrameLayout android:id="@ id/heart_strength,height其FrameLayout android:id="@ id/heart_strength_background高度設定如下:
<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布局高度時:
@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 在不同的螢屏尺寸上動態變化,我想知道它的值。
uj5u.com熱心網友回復:
setHeartStrengthViewHeight這是因為呼叫時還沒有繪制視圖。要解決此問題,請嘗試以下操作:
@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)
}
})
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/426321.html
