2012-04-11 38 views
13

que tiene un diseño con tres elementos y su orientación es 'horizontal'weightSum Android no funciona correctamente

Quiero fijar el tamaño de cada elemento que ocupan en mi diseño.

primer elemento debe tomar el 40% del espacio total, entonces el segundo elemento debe ocupar el 5% y el tercero debe ocupar el 55% de espacio restante.

Mi aspecto layout así:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 


<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="100" > 

    <TextView 
     android:id="@+id/outletname" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="40" 
     android:text="@string/outlet_name2" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="5" 
     android:text=": " /> 

    <TextView 
     android:id="@+id/outletnamevalue" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="55" 
     android:text="abcdefttt" /> 
</LinearLayout> 
</LinearLayout> 

texto en 'Vista de Texto' va a cambiar de forma dinámica, por lo que quiero mantener el espacio constante para los elementos con independencia del contenido de las vistas ...

Respuesta

43

En para hacer peso eficaz, usted debe también necesitará establecer los anchos de de sus TextViews a 0DP.

android:layout_width="0dp" 
+10

para completar la respuesta, hay que entender que el peso sólo se aplica a/restante/espacio, es decir, espacio que queda una vez que se aplica el valor layout_width. – njzk2

+0

esto hizo mi día: D por cuántos años ... LOL. así que esa es la única respuesta al problema. UPVOTEEEEEEE – jace

0

I utilizar esta fórmula:

layout_weight=(weightSum-PercentageYouWant*weightSum)/(TotalElements-1) 

primer elemento debe tomar 40% del espacio total entonces segundo elemento debe ocupar 5% y tercero uno debe ocupar espacio restante 55%.

primera Elemento:

(100-0.4*100)/(3-1)="30" 

segundo elemento:

(100-0.05*100)/(3-1)="47.5" 

tercera Elemento:

(100-0.55*100)/(3-1)="22.5" 

por lo 40% + 5% + 55% = 100%

layout_weight="30" + layout_weight="47.5" + layout_weight="22.5" = weightSum="100" 

así es como yo lo entiendo.

He aquí un ejemplo (botones son sólo para referencia gráfica)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:weightSum="120" > 

    <!-- WeightSum=120 and I will add 4 elements, so TotalElements=4 --> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="36" 
     android:orientation="vertical" > 

     <!-- I want this LinearLayout to be 10%, so (120-10%*120)/(4-1)=36 --> 

     <Button 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="10%" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="32" 
     android:orientation="vertical" > 

     <!-- I want this LinearLayout to be 20%, so (120-20%*120)/(4-1)=32 --> 

     <Button 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="20%" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="28" 
     android:orientation="vertical" > 

     <!-- I want this LinearLayout to be 30%, so (120-30%*120)/(4-1)=28 --> 

     <Button 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="30%" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="24" 
     android:orientation="vertical" > 

     <!-- I want this LinearLayout to be 40%, so (120-40%*120)/(4-1)=24 --> 

     <Button 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="40%" /> 
    </LinearLayout> 

</LinearLayout> 
Cuestiones relacionadas