2011-06-23 20 views
5

Estoy tratando de crear un diseño con tres textviews uno al lado del otro. Las textviews son de diferente duración.Crear TextViews con el mismo ancho en una fila

Todo lo que quiero hacer es organizarlos para que siempre tengan el mismo layout_width independientemente de la longitud de su texto.

Enfoques I trataron:

1) He intentado utilizar linear_layout y establecer el peso de textviews ser 1 pero que no hacerlo, ya que sólo se aplica para el ancho restante después de todos textViews están posicionados.

2) También traté de usar el diseño de la tabla y estirar todas las columnas utilizando stretchColumns = "*". pero eso también asigna el ancho requerido a la longitud de los textos y solo entonces estira las columnas.

3) Esto es un truco pero esto tampoco está funcionando. Traté de tener un diseño lineal dentro de un diseño relativo con tres textviews para no tener texto, pero forzarlos a tener el mismo ancho estableciendo sus pesos. Esto funciona, pero luego quiero que mis próximas vistas, que están en el diseño relativo, se alineen con los bordes derecho e izquierdo de las vistas dentro del diseño lineal. Pero esto no funciona. Aquí está mi diseño que utilicé para esto.

 <RelativeLayout 
      android:layout_width="fill_parent" android:layout_height="fill_parent" > 
      <!-- This is a hack to have all three textviews in a row to obtain equal width --> 
      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" > 
       <TextView android:id="@+id/tv_ref1" 
        android:layout_width="0dp" android:layout_height="wrap_content" 
        android:text="My" 
        android:layout_weight="1.0" 
        android:gravity="center" /> 
       <TextView android:id="@+id/tv_ref2" 
        android:layout_width="0dp" android:layout_height="wrap_content" 
        android:text="My" 
        android:layout_weight="1.0" 
        android:gravity="center" /> 
       <TextView android:id="@+id/tv_ref3" 
        android:layout_width="0dp" android:layout_height="wrap_content" 
        android:text="My ghghhfghjjghjkkhgfhfghfjhjh" 
        android:layout_weight="1.0" 
        android:gravity="center" /> 
      </LinearLayout> 


      <TextView 
       android:layout_width="wrap_content" android:layout_height="wrap_content" 
       android:layout_below="@id/tv_ref1" 
       android:gravity="center" 
       android:text="Text Text Text" 
       android:textColor="@color/white" /> 
      <TextView 
       android:layout_width="wrap_content" android:layout_height="wrap_content" 
       android:layout_below="@id/tv_ref1" 
       android:gravity="center_horizontal" 
       android:text="Med" 
       android:textColor="@color/white" /> 
      <TextView 
       android:layout_width="wrap_content" android:layout_height="wrap_content" 
       android:layout_below="@id/tv_ref1" 
       android:gravity="center" 
       android:text="Long Text wtwy yu hjsyi" 
       android:textColor="@color/white" /> 

     </RelativeLayout> 

Por favor, hágamelo saber lo que podría estar haciendo mal y cómo puedo forzar mis textviews en una fila para tener la misma anchura.

Gracias.

Respuesta

22

layout_width Ajuste a "fill_parent" y layout_weight a "1" para todas sus TextEdits les obliga a tener la misma anchura

+0

Eso no funciona. Lo intenté. Le da más ancho al texto que es más largo que los otros textos. – achie

+0

si layout_width es "wrap_content", sí; si es "fill_parent" - no. pruébalo –

+0

Ahh mi mal. Si, funciona. E incluso las textviews en la distribución lineal dentro de la relación relativa en mi código de diseño también funcionan. Por lo tanto, funciona con fill_parent o 0dp para todas las textviews. También puede funcionar si establecemos que el ancho de todas las textviews sea el mismo. Gracias. – achie

0

Por qué no usa max width atributo de propiedades. Configurarlo mismo para todos los textviews significa 20 o 30dip

+0

Bueno, no siempre se puede decir que los textviews serán de esa longitud. Otro problema que enfrentaremos al usar este enfoque es cuando admitimos múltiples densidades de pantalla, orientaciones y tamaños de pantalla. No quiero crear un archivo de diseño por separado para cada factor de pantalla y establecer diferentes anchos máximos para cada una de esas vistas. Preferiría usar un diseño y hacerlo funcionar para todos los casos. Gracias por intentar ayudar sin embargo. – achie

0

Ante todo uso:

xmlns:android="http://schemas.android.com/apk/res/android" 

para el diseño de la raíz, luego verifique y modifique el código anterior a medida que repite el textView después de que LinearLayout esté cerrado, que no es necesario, como creo.

+0

El diseño relativo no es mi diseño de raíz. Así que hago la declaración del espacio de nombres en mi diseño de raíz. Y el diseño lineal está cerrado ya que debería estar cerrado. Las textviews dentro de ese diseño son solo un truco y, si funciona, estableceré su altura en 0dp. – achie

+0

¿Por qué usaste tres textViews justo después de cerrar la distribución lineal? están afectando el diseño de TextViews en LinearLayout. simplemente elimínelos y verifique que funcionen bien, de lo contrario, organícelos adecuadamente. –

+0

No, eso no está bien. Las vistas de texto fuera del diseño lineal no afectan al diseño de las vistas de texto en el diseño lineal. Y no deberían hacerlo y no lo están haciendo. He probado mi código. – achie

0

obtener la anchura máxima entre todos los textviews y establece que el ancho de todas las textviews

@Override 
     public void onWindowFocusChanged(boolean hasFocus) { 
      // TODO Auto-generated method stub 
      super.onWindowFocusChanged(hasFocus); 
      // System.out.println("...111Height..."+mainLayout.getMeasuredHeight()); 

      width1 = textView1.getWidth(); 
    width2 = textView2.getWidth(); 
    width3 = textView3.getWidth(); 


    //get maximum width among all width 
    int[] nums={width1 ,width2 ,width3}; 
    Arrays.sort(nums); 
    int max = nums[nums.length-1]; 

    //set this maximum value to all the textviews 

    textView1.setWidth(max); 
    textView2.setWidth(max); 
    textView3.setWidth(max); 

    } 
Cuestiones relacionadas