2011-09-04 28 views
12

Tengo dos botones que me gustaría asignar dinámicamente una preferencia. Comienzan cada uno con un peso de .5 (que por supuesto se agrega al peso de LinearLayout de 1), pero si la preferencia es verdadera, entonces me gustaría cambiar sus pesos a .7 y .3, respectivamente. Puedo establecer el peso en XML, pero parece que no puedo encontrar la forma de cambiarlo programáticamente.Establecer el peso (porcentaje) programáticamente


Solución

LinearLayout.LayoutParams PO = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, .60f); 
LinearLayout.LayoutParams MO = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, .20f); 
+0

comprobar mi respuesta en http://stackoverflow.com/questions/4641072/how-to-set-layout-weight-attribute-dynamically-from-code#answer-13943330 – gantzer89

Respuesta

9

Mira en LayoutParams, que tiene un campo para establecer el peso

+4

Yop, que terminó con : 'LinearLayout.LayoutParams PO = new LinearLayout.LayoutParams (LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, .60f); \t \t LinearLayout.LayoutParams MO = new LinearLayout.LayoutParams (LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, .20f); ' – ecirish

+2

@ecirish He añadido su solución a la cola de la pregunta, para una mejor visibilidad –

2

Utilice esta opción para reciclar el LayoutParam objeto:

((LinearLayout.LayoutParams) view.getLayoutParams()).weight = 0.2f; 
view.refreshDrawableState(); // This is to explicit force the refresh. 
2

Si el constructor con ancho , la altura y el peso no funcionan, intente usar el constructor con ancho y alto. Y luego configure manualmente el peso.

Y si desea que el ancho se configure de acuerdo con el peso, establezca el ancho como 0 en el constructor. Lo mismo aplica para la altura. El siguiente 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); 
Cuestiones relacionadas