Tengo una barra que debe tener una altura de acuerdo con el valor de viewmodel.heartStrengthLiveData (0..100). Quiero establecer la altura con app:layout_constraintHeight_percent="..." con enlace de datos. ¿Cómo puedo hacer esto?
<androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/heart_strength_bgc" 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" > <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/heart_strength" android:layout_width="0dp" android:layout_height="0dp" app:heartStrength="@{viewmodel.heartStrengthLiveData}" android:background="@drawable/chart_widget_background_light_gray" android:backgroundTint="@color/turquoise" app:layout_constraintHeight_percent="0" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>Actualización: XML corregido.
En su ViewModel , configure algo como esto que incluya LiveData y BindingAdapter para el atributo de porcentaje de altura del diseño:
public MutableLiveData heartStrengthLiveData = new MutableLiveData<>(100f); public float getHeartStrength() { return (float) heartStrengthLiveData.getValue() / 100f; } @BindingAdapter("layout_constraintHeight_percent") public static void setLayoutConstraintHeightPercent(View view, float percentHeight) { ConstraintLayout layout = (ConstraintLayout) view.getParent(); ConstraintSet cs = new ConstraintSet(); cs.clone(layout); cs.constrainPercentHeight(view.getId(), percentHeight); cs.applyTo(layout); }En el diseño, especifique:
app:layout_constraintHeight_percent='@{viewmodel.heartStrength}' app:layout_constraintHeight_default="percent"Un porcentaje de altura de 1,0 no funcionará si la altura predeterminada no se establece en "porcentaje", lo que soluciona el problema en su comentario (ahora eliminado).