2011-09-04 10 views
12

Ho due pulsanti che mi piacerebbe peso dinamicamente dare una preferenza. Iniziano ciascuna con un peso di 0,5 (che ovviamente si aggiunge al peso del LinearLayout di 1), ma se la preferenza è vero, allora mi piacerebbe cambiare il loro peso di 0,7 e 0,3, rispettivamente. Posso impostare il peso in XML ma non riesco a trovare come modificarlo a livello di codice.Set peso (percentuale) di programmazione


Soluzione

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

leggi la mia risposta su http://stackoverflow.com/questions/4641072/how-to-set-layout-weight-attribute-dynamically-from-code#answer-13943330 – gantzer89

risposta

9

Guardare in LayoutParams, ha un campo per l'impostazione del peso

+4

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

+2

@ecirish Ho aggiunto la soluzione alla coda di domanda, per una migliore visibilità –

2

Utilizzare questa opzione per riciclare l'oggetto LayoutParam:

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

Se il costruttore con larghezza , altezza e peso non funzionano, prova a usare il costruttore con larghezza e altezza. E quindi impostare manualmente il peso.

E se si vuole la larghezza da impostare in base al peso, larghezza impostata come 0 nel costruttore. Lo stesso vale per l'altezza. Sotto codice funziona per me.

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); 
Problemi correlati