gpt4 book ai didi

android - ConstraintLayout Ratio 绑定(bind)有宽度但没有高度

转载 作者:搜寻专家 更新时间:2023-11-01 09:20:45 24 4
gpt4 key购买 nike

我正在尝试使用数据绑定(bind)动态设置 2 个 ImageView 的比例。如果标志为真,则第二个 ImageView 的 (B) 可见性设置为消失,第一个 (A) 应以 16:9 格式显示并展开以填充 parent 的宽度。如果两个 View 都应该是可见的,则它们应该是 1:1 并且并排显示。

问题是左侧 ImageView A 从不显示。使用布局检查器,我可以验证它是否存在并具有宽度,但没有高度。

我错过了什么吗? B 按预期显示。如果我在 A 上手动设置比率,它会正确显示。

我的绑定(bind)看起来像这样:

@BindingAdapter("imageRatio")
fun setConstraintRatio(view: ImageView, ratio: String) {
val constraintLayout = view.parent as ConstraintLayout
val constraintSet = ConstraintSet()
constraintSet.clone(constraintLayout)
constraintSet.setDimensionRatio(view.id, ratio)
constraintLayout.setConstraintSet(constraintSet)
}

格式化程序:

val dimensionRatio: String
get() {
return if (showB) "1:1"
else "H,16:9"
}

我的布局是这样的:

<ImageView
android:id="@+id/card_image_a"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp" android:scaleType="centerCrop"
app:imageRatio="@{formatter.dimensionRatio}"
app:layout_constraintEnd_toStartOf="@id/card_image_b"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/divider"
android:visibility="visible" />

<ImageView
android:id="@+id/card_image_b"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:scaleType="centerCrop"
app:imageRatio="@{formatter.dimensionRatio}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/card_image_a"
app:layout_constraintTop_toBottomOf="@id/divider"
app:visibleOrGone="@{formatter.showImageB}"
tools:visibility="visible" />

最佳答案

经过一些测试,我意识到你的布局已经布置好,你应该使用 constraintSet.applyTo(constraintLayout),如下所示:

@BindingAdapter("imageRatio")
fun setConstraintRatio(view: ImageView, ratio: String) {
val constraintLayout = view.parent as ConstraintLayout
val constraintSet = ConstraintSet()
constraintSet.clone(constraintLayout)
constraintSet.setDimensionRatio(view.id, ratio)
constraintSet.applyTo(constraintLayout)
}

此外,我一直看到 DimensionRatio 方向字母是小写的(可能是稍后发现的另一个问题)。因此,为了以防万一,请更改您的 Formatter:

val dimensionRatio: String
get() {
return if (showB) "1:1"
else "h,16:9"
}

希望这能解决问题!

关于android - ConstraintLayout Ratio 绑定(bind)有宽度但没有高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55910365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com