studio que programacion linearlayout gridlayout ejemplos ejemplo dinamico absoluto android android-layout android-layout-weight

programacion - linearlayout android que es



¿Cómo establecer el atributo layout_weight dinámicamente desde el código? (9)

Cualquiera de LinearLayout.LayoutParams y TableLayout.LayoutParams funcionaron para mí, porque los botones de la derecha es TableRow.LayoutParams . Es decir:

TableRow.LayoutParams buttonParams = new TableRow.LayoutParams( TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 1f);

Sobre el uso de MATCH_PARENT o WRAP_CONTENT será lo mismo.

¿Cómo puedo establecer el valor del atributo layout_weight para el botón en Android dinámicamente desde el código java?


Puede pasarlo como parte del constructor LinearLayout.LayoutParams :

LinearLayout.LayoutParams param = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1.0f ); YOUR_VIEW.setLayoutParams(param);

El último parámetro es el peso.


Si layoutparams ya está definido (en XML o dinámicamente), aquí hay un liner:

((LinearLayout.LayoutParams) mView.getLayoutParams()).weight = 1;


Si alguien en busca de respuesta, usa esto:

LinearLayout.LayoutParams lay = (LinearLayout.LayoutParams) myLayout.getLayoutParams(); lay.weight = 0.5;

Si está inicializando su diseño desde un archivo xml, esto será mucho más conveniente que proporcionar nuevos parámetros de diseño para el diseño lineal.


Si el constructor con ancho, alto y peso no funciona, intente usar el constructor con ancho y alto. Y luego ajustar manualmente el peso.

Y si desea que el ancho se establezca de acuerdo con el peso, establezca el ancho como 0 en el constructor. Lo mismo se aplica para la altura. A continuación el código funciona para mí.

LinearLayout.LayoutParams childParam1 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT); childParam1.weight = 0.3f; child1.setLayoutParams(childParam1); LinearLayout.LayoutParams childParam2 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT); childParam1.weight = 0.7f; child2.setLayoutParams(childParam2); parent.setWeightSum(1f); parent.addView(child1); parent.addView(child2);


Si ya definió su vista en su archivo de diseño (xml), solo desea cambiar el peso programáticamente, de esta manera es mejor

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mButton.getLayoutParams(); params.weight = 1.0f; mButton.setLayoutParams(params);

un nuevo LayoutParams sobrescribe otros parámetros definidos en su archivo xml como márgenes, o debe especificarlos todos en LayoutParams.


Si ya ha definido su vista en el archivo de diseño (xml) y solo desea cambiar el peso de forma gramatical, entonces la creación de nuevos LayoutParams sobrescribe otros parámetros definidos en su archivo xml.

Así que primero debes usar "getLayoutParams" y luego setLayoutParams

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mButton.getLayoutParams(); params.weight = 4f; mButton.setLayoutParams(params);


Usando Kotlin puedes hacer algo como:

import android.content.Context import android.support.v4.content.ContextCompat import android.support.v7.widget.CardView import android.widget.* import android.widget.LinearLayout class RespondTo : CardView { constructor(context: Context) : super(context) { init(context) } private fun init(context: Context) { val parent = LinearLayout(context) parent.apply { layoutParams = LinearLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT, 1.0f).apply { orientation = LinearLayout.HORIZONTAL addView(EditText(context).apply { id = generateViewId() layoutParams = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 0.9f).apply { } }) addView(ImageButton(context).apply({ layoutParams = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 0.1f) background = null setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_save_black_24px)) id = generateViewId() layoutParams = RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply { addRule(RelativeLayout.ALIGN_PARENT_RIGHT) // addRule(RelativeLayout.LEFT_OF, myImageButton.id) } })) } } this.addView(parent) } }


Utilice LinearLayout.LayoutParams :

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); params.weight = 1.0f; Button button = new Button(this); button.setLayoutParams(params);

EDIT: Ah, la respuesta de Erich es más fácil!