2012-07-23 14 views
6

he codificado el layout_weight en el diseño xml.pero ahora quiero dar el layout_weight y weightSum del código java.android peso de diseño mediante programación

¿Cómo lo hacemos de nuestra clase?

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="25" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="5" 
     android:background="#F51215" 
     android:paddingLeft="5dip" 
     android:text="5" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="20" 
     android:background="#1AC92B" 
     android:paddingLeft="5dip" 
     android:text="20" /> 
</LinearLayout> 

Respuesta

18
//set as like this below for different view set different float value. 

myview.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,5f)); 
+11

Tenga en cuenta que a diferencia de XML, no debe establecer la altura o anchura a 0 como el diseño simplemente no aparecerá lo contrario. – TheIT

33

Algo como esto:

   ...... 
       LinearLayout layout = (LinearLayout)findViewById(YOUR_LAYOT_ID); 
       layout.setWeightSum(25f); 
       LinearLayout.LayoutParams lParams = (LinearLayout.LayoutParams) layout.getLayoutParams(); //or create new LayoutParams... 

       lParams.weight = 0.5f; 
       ....... 
       someView.setLayoutParams(lParams); 
       ....... 
+0

No puedo hacer esto para que someView sea un TextView. ¿Alguna otra solución? –

+0

Lamentablemente, ya no existe un método como 'setWeightSum()' ... –

+1

@NarayanaJ, ¿estás seguro? http://developer.android.com/reference/android/widget/LinearLayout.html#setWeightSum(float) –

5

sólo quería añadir un ejemplo de cómo utilizar el weightsum ejemplo, con un TableRow con TextViews interior:

  TableRow row = new TableRow(this); 
      TableRow.LayoutParams params1 = new TableRow.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT, 10f); 
      row.setLayoutParams(params1); 
      row.setPadding(10, 10, 10, 10); 
      row.setBackgroundColor(R.color.black); 

      TextView tv = new TextView(this); 
      TableRow.LayoutParams params2 = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 6f); 
      tv.setLayoutParams(params2); 
      tv.setTextSize(30); 
      tv.setBackgroundResource(R.color.white); 

      TextView tv2 = new TextView(this); 
      TableRow.LayoutParams params3 = new TableRow.LayoutParams(0, LayoutParams.MATCH_PARENT, 2f); 
      tv2.setLayoutParams(params3); 
      tv2.setBackgroundResource(R.color.green); 

      TextView tv3 = new TextView(this); 
      TableRow.LayoutParams params4 = new TableRow.LayoutParams(0, LayoutParams.MATCH_PARENT, 2f); 
      tv3.setLayoutParams(params4); 
      tv3.setBackgroundResource(R.color.blue); 

Produce el TableRow debajo. El padre cuyo peso es 10 y el ancho de los niños son entonces 60%, 20% y 20% del ancho. La altura está determinada aquí por TextView, tv, que tiene una altura de 30. Espero que ayude a alguien. :-)

text

2

Así es como lo establece.

LinearLayout yourLayout=(LinearLayout)findViewById(R.id.container); 
yourLayout.setWeightSum(0.6f); 
1

generan dinámicamente TextView con peso usando LinearLayout

LinearLayout lin_hoizontal = new LinearLayout(context); 
lin_hoizontal.setOrientation(LinearLayout.HORIZONTAL); 
lin_hoizontal.setLayoutParams(new android.widget.LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 10f)); 
lin_hoizontal.setPadding((int) context.getResources().getDimension(R.dimen.d_8), (int) context.getResources().getDimension(R.dimen.d_2), (int) context.getResources().getDimension(R.dimen.d_8), (int) context.getResources().getDimension(R.dimen.d_2)); 

android.widget.LinearLayout.LayoutParams params_label = new android.widget.LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 2.5f); 
TextView txt_label = new TextView(context); 
txt_label.setTextColor(context.getResources().getColor(R.color.listing_header_txt_color));//your text color 
txt_label.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.d_13)); 
txt_label.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL)); 
txt_label.setLayoutParams(params_label); 
txt_label.setPadding(0, 0, (int) context.getResources().getDimension(R.dimen.d_2), 0); 
txt_label.setText("Label"); 


android.widget.LinearLayout.LayoutParams params_value = new android.widget.LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 7.5f); 
TextView txt_value = new TextView(context); 
txt_value.setTextColor(context.getResources().getColor(R.color.listing_header_txt_color)); 
txt_value.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.d_13)); 
txt_value.setTypeface(Typeface.create("sans-serif-light", Typeface.NORMAL)); 
txt_value.setLayoutParams(params_value); 
txt_value.setPadding((int) context.getResources().getDimension(R.dimen.d_2), 0, 0, 0); 
txt_value.setText("Value"); 

lin_hoizontal.addView(txt_label); 
lin_hoizontal.addView(txt_value); 
lin_hoizontal.addView(lin_main); 
Cuestiones relacionadas