Я пытаюсь динамически установить соотношение 2 ImageView
с использованием привязки данных. Если флаг имеет значение true, вторая видимость ImageView
(B) устанавливается как пропавшая, а первая (A) должна отображаться в формате 16:9
и расширяться, чтобы заполнить ширину родительского элемента. Если оба вида должны быть видимыми, они должны быть 1:1
и отображаться рядом.
Проблема в том, что левый вид изображения, A, никогда не отображается. С помощью инспектора макета я могу убедиться, что он существует и имеет ширину, но не имеет высоты.
Я что-то упустил? B отображается как ожидалось. Если я вручную установлю коэффициент на A, он будет отображаться правильно.
Моя привязка выглядит так:
@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" />