2010-04-20 22 views
8

Estoy usando un encabezado para una vista de lista. El encabezado ListView tiene tres columnas. Di a, b, c. IcConfiguración del ancho de la vista de texto en LinearLayout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="40dip" 
android:padding="0dip"> 
<LinearLayout 
    android:orientation="horizontal" 
    android:background="#1e90ff" 
    android:layout_width="0dip" 
    android:layout_weight="1" 
    android:padding="5dip" 
    android:layout_height="40dip"> 
    <TextView 
     android:id="@+id/a" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textColor="#000000" 
     android:layout_weight="1" 
     android:gravity="center_vertical" 
     android:text="@string/a" 
    /> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textColor="#000000" 
     android:layout_weight="1" 
     android:gravity="center_vertical" 
     android:id="@+id/b" 
     android:singleLine="true" 
     android:text="@string/b" 
    /> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textColor="#000000" 
     android:layout_weight="1" 
     android:gravity="center_vertical" 
     android:id="@+id/c" 
     android:singleLine="true" 
     android:text="@string/c" 
    /> 
</LinearLayout> 
</LinearLayout> 

ahora quiero fijar la anchura de las columnas a, b, respectivamente: Estoy utilizando dos LinearLayouts para diseñar cabecera ListView como se muestra a continuación. ¿Cómo establecer el ancho de estas columnas? Nuevamente, ¿es una buena práctica usar LinearLayout para esto? Por favor avise.

Respuesta

13

Para cambiar el layout_width de sus textviews a un uso de ancho fijo:

android:layout_width="40dip" 

O de que usted quiere que ocupan porcentajes de la pantalla cambiar el layout_weight

android:layout_weight="2" 

En androide el peso de todos los elementos dentro de otro (como su diseño lineal aquí) se sumarán y luego usarán el peso de cada vista para definir cuánto espacio ocupa. ES DECIR. si tuviera los pesos como 2,3,5 para a, b, c respectivamente, entonces a sería 20% de ancho, b 30% de ancho yc 50% de ancho.

Si quieres columnas, se debe considerar el uso de un diseño de tabla (tutorial)

+1

muchas gracias por esta explicación sencilla y directa. Soy nuevo en diseños y esto me ahorró MUCHO tiempo. – BrunoPugliese

2

Usted puede utilizar el método de TextViewsetWidth() para establecer el tamaño dinámicamente

4

también puede establecer el ancho en porcentaje como sigue

<LinearLayout 
    android:orientation="horizontal" 
    android:background="#1e90ff" 
    android:layout_width="0dip" 
    android:layout_weight="1" 
    android:padding="5dip" 
    android:layout_height="40dip"> 

    <!-- 
     android:layout_weight="0.5" <= it will set the 50 % width of screen 
    --> 
    <TextView 
     android:id="@+id/a" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textColor="#000000" 
     android:layout_weight="0.5" 
     android:gravity="center_vertical" 
     android:text="@string/a" 
    /> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textColor="#000000" 
     android:layout_weight="0.5" 
     android:gravity="center_vertical" 
     android:id="@+id/b" 
     android:singleLine="true" 
     android:text="@string/b" 
    /> 
</LinearLayout> 
+0

Una cosa importante a tener en cuenta es que realmente no importa a qué números específicos establezca el atributo layout_weight, son las proporciones las que son importantes. Por ejemplo, su XML funcionaría exactamente igual si el 0.5 fuera intercambiado por 1.0 o 5.0, siempre y cuando lo haya intercambiado en todas partes. Aunque sus decimales probablemente sean útiles, ya que puede contar fácilmente y ver si suman 1.0. –

0

Si está haciendo esto dentro de un diseño que se utiliza en un ListView, solo se establece el ancho dinámicamente en el código. De hecho, tengo tres TextViews en mi lista, pero solo estoy mostrando dos aquí, por brevedad. Aquí es XML desde el diseño:

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

    <TextView 
     android:id="@+id/sl_name" 
     android:layout_width="wrap_content" 
     android:layout_weight="40" 
     android:layout_height="wrap_content" 
     android:textSize="16sp"/> 

    <TextView 
     android:id="@+id/sl_score" 
     android:textSize="16sp" 
     android:gravity="right" 
     android:paddingRight="8dp" 
     android:layout_width="wrap_content" 
     android:layout_weight="15" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 

aquí es el código de dentro del adaptador para el ListView:

public View getView(int position, View cvtView, ViewGroup parent) 
    { 
    int width = parent.getWidth(); 
    View rowView = inflater.inflate(R.layout.scorelayout, parent, false); 
    String str = values.get(position); 
    String[] vals = str.split("\t"); 

    TextView tvName = (TextView)rowView.findViewById(R.id.sl_name); 
    tvName.setWidth((int)(width *.30)); 
    tvName.setText(vals[2]); 

    TextView tvScore = (TextView)rowView.findViewById(R.id.sl_score); 
    int stemp = Integer.parseInt(vals[0]); 
    tvScore.setWidth((int)(width * .15)); 
    tvScore.setText(Integer.toString(stemp)); 
} 
Cuestiones relacionadas