¿Cómo establecer el atributo de peso de forma dinámica desde el código de Kotlin?

¿Cómo puedo establecer el valor del atributo layout_weight para LinerLayout en Android dinámicamente desde el código de Kotlin?

var orange : LinearLayout = findViewById(R.id.orangeLineFiveStars) as LinearLayout 

¿Es código correcto? [No funciona en mi aplicación]

  var orangeParams : LinearLayout.LayoutParams = LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT) orangeParams.weight = 0.33f orange.layoutParams = orangeParams 

Este código tampoco funciona

 var orange.layoutParams = LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT,0.33f) 

XML:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.sanke.ilafedoseev.raitmyworkstatistic.MainActivity"> <LinearLayout android:layout_margin="10dp" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/orangeLineFiveStars" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="4dp" android:background="#febe40" android:orientation="horizontal"/> <LinearLayout android:id="@+id/whiteLineFiveStars" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"/> </LinearLayout> </LinearLayout> 

Debe recordar que los parameters de layout se pasan de la vista de elementos secundarios a secundarios. Probablemente desee cambiar layout_weight de algún elemento secundario de LinearLayout.

En tu caso, probablemente quieras hacer algo como esto

 (orangeLineFiveStars.layoutParams as LinearLayout.LayoutParams).weight = newOrangeWeight (whiteLineFiveStars.layoutParams as LinearLayout.LayoutParams).weight = newWhiteWeight 

Puede ser necesario solicitar también un nuevo layout

 parentLinearLayout.requestLayout() 

No puedes probar algo como esto:

 yourView.layoutParams.apply { (this as LinearLayout.LayoutParams).weight = .33f //your value for weight } yourView.requestLayout() 

O

 val param = yourView.cardView.layoutParams as LinearLayout.LayoutParams param.weight = .33f yourView.layoutParams = param 
  • ¿Cómo recuperar el ID de recurso en fragment usando kotlin en Android?
  • Enfrentando problemas con la implementación de Rx Java con la architecture de flujo en Android kotlin
  • Kotlin REPL con Android Classes unStub! Ed
  • El complemento kapt no funciona con gradle-script-kotlin
  • `break` y` continue` en `forEach` en Kotlin
  • Mapa de cortocircuito de Kotlin {}. FirstOrNull {}
  • Kotlin: atribuye visibilidad al object complementario
  • ¿Por qué no se permite `return` en el bloque de inicio de Kotlin?
  • Kotlin: devuelve una interfaz genérica
  • Kotlin lambda con varios parameters
  • Clase de datos sellados en Kotlin