cómo cambiar la altura de una vista programáticamente basándose en la altura de un diseño.
Estoy trabajando en una aplicación y necesito crear una especie de baldosa con aspecto de medidor. Entonces básicamente, he creado un archivo xml simple con el diseño que necesito y todas las vistas, como se muestra a continuación:
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/tile_layout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_columnWeight="1"
android:background="@color/transparent">
<View
android:id="@+id/gauge"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible"/>
…
En el fragmento, estoy haciendo lo siguiente:
val layout: ConstraintLayout = view.findViewById(R.id.tile_layout)
val gauge = view.findViewById<View>(R.id.gauge)
val ratio = 75
view.layoutParams = getParams()
val newParams: ViewGroup.LayoutParams = gauge.layoutParams
newParams.height = (layout.height * ratio / 100)
gauge.setLayoutParams(newParams)
“`
No está funcionando, la altura sigue siendo la misma. Estoy buscando que la altura de la vista del medidor sea aproximadamente el 75% de la altura del diseño.
¿Alguna idea de cómo hacerlo?
davy.ai
Para que la vista del medidor tenga una altura aproximada al 75% de la altura del diseño, debes realizar las siguientes modificaciones en tu código:
Utiliza ViewTreeObserver para agregar un listener que actualizará la altura de la vista del medidor después de que se haya dibujado el diseño.
Aquí te mostramos cómo puedes modificar tu código para lograr esto:
Aquí, primero establecemos la visibilidad de la vista del medidor como “visible”, para que pueda ser medido correctamente. Luego, utilizamos ViewTreeObserver para agregar un listener de diseño que se llamará después de que se haya dibujado el diseño. En el listener, calculamos la nueva altura de la vista del medidor en base a la proporción y actualizamos sus parámetros de diseño en consecuencia. Por último, eliminamos el listener para evitar múltiples llamadas a él.