2010-12-01 13 views
24

No puedo hacer que mi TableLayout entre en la pantalla when the text cell is large, a pesar de las modificaciones de texto inside the cell.Problemas de formato de diseño de tabla de Android

Este es mi TableLayout. Una tabla simple de dos filas y dos columnas. Las celdas de la columna izquierda son multiline. Si el texto de una de estas celdas es lo suficientemente grande como para romperse en dos líneas, la columna se estira para llenar toda la pantalla y las columnas de la derecha salen de la pantalla.

¿Por qué? ¿Cómo puedo forzar que la mesa completa permanezca dentro de la pantalla? Cualquier sugerencia es bienvenida.

Mi TableLayout es la siguiente:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/myTableLayout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<TableRow> 
    <TextView 
     android:text="Account 4 with a very large name to see if it breaks on two or more lines" 
     android:singleLine="false" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     > 
    </TextView> 
    <TextView 
     android:text="$400.00" 
     android:gravity="right" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     > 
    </TextView> 
</TableRow> 

<TableRow> 
    <TextView 
     android:text="Account 5" 
     android:singleLine="false" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     > 
    </TextView> 
    <TextView 
     android:text="$400.00" 
     android:gravity="right" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     > 
    </TextView> 
</TableRow> 

</TableLayout> 

El código para mostrar el diseño es básico:

public class AccountBrowserTest 
    extends Activity 
{ 
    public void onCreate(Bundle savedInstanceState) 
    {  
     super.onCreate(savedInstanceState); 

     this.setContentView(R.layout.accountbrowser_test); 

    } 
} 

Respuesta

32

Agregar androide: stretchColumns y android:shrinkColumns al elemento TableLayout:

<TableLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:stretchColumns="1" 
    android:shrinkColumns="1"> 

Los 1 valores son las columnas que desea que los cambios se produzcan.Puede especificar más de un valor de la siguiente manera:

android:stretchColumns="0,1" 

o si desea que los cambios que suceden a todos ustedes columnas como esta:

android:stretchColumns="*" 

Por favor, mira aquí para obtener información detallada: http://android-pro.blogspot.com/2010/02/table-layout.html

0

Podría tener que ver con la wrap_content para el ancho de las células de varias líneas.

Puede probar algunas formas de darle un ancho más explícito ... es decir, establecer el width to 0, y dar a todas las celdas un layout_gravity = 1. Eso debería hacer que cada una de las columnas ocupe una cantidad igual de ancho (o puede ajustar si quiere que una tenga más peso que la otra).

0

Negación: No soy muy bueno con los diseños, por lo que sólo jugué un poco con algunos valores, y esto parecía funcionar (no puedo dar una buena explicación de por qué sin embargo):

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/myTableLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <TableRow> 
     <TextView 
      android:text="Account 4 with a very large name to see if it breaks on two or more lines" 
      android:singleLine="false" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
     /> 
     <TextView 
      android:text="$400.00" 
      android:gravity="right" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.001" 
     /> 
    </TableRow> 

    <TableRow> 
     <TextView 
      android:text="Account 5" 
      android:singleLine="false" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
     /> 
     <TextView 
      android:text="$400.00" 
      android:gravity="right" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.001" 
     /> 
    </TableRow> 
</TableLayout> 

También tenga en cuenta que no he probado este diseño en una Actividad, solo lo miré en la vista de diseño del editor xml, pero al menos se veía bien allí.

0

También podría intentar manipular stretchColumns y/o shrinkColumns en TableLayout.

8

tuve el mismo problema con mi aplicación y encontró la siguiente solución:

<TableLayout 
    android:shrinkColumns="0" 
    android:stretchColumns="1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
</TableLayout> 

Esto funciona bien con 2 columnas.

5

que tenían el mismo problema y lo resolvió mediante la adición de

android:stretchColumns="0" 

al elemento TableLayout y el establecimiento de

android:layout_width="0dp" 

en el TextView que era demasiado largo.

+2

y qué es exactamente lo que esto significa? ¿Cómo descubriste que esta es la solución? – Paul

1

Hay solución temporal, lo hacen:

android:stretchColumns = " (number of actual col) - 1 " 

Sin solución en este caso funcionó en mi caso.

5

dentro del diseño de la tabla use la propiedad shrinkColumns para las columnas en las que desea que se les permita contraer para ajustar

la forma más fácil es:

<TableLayout 
android:shrinkColumns="*"/> 

para reducir el tamaño de todas las columnas o puede escribir en lugar de "*", los índices de columna que desea reducir, que en su caso serán

<TableLayout 
android:shrinkColumns="0,1"/> 

en cuenta que los índices de columna empiezan desde cero, por lo que el último código permite que las columnas primeras (índice = 0) y la segunda (índice = 1) se contraigan.

0

Esperanza este código le ayudará a .. MainActivity clase pública se extiende Actividad {

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

<TextView 
     android:id="@+id/tv1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="8dp" 
     android:singleLine="false" 
     android:text="Account 4 with a very large \n name to see if it breaks \n on two or more lines" > 
    </TextView> 

    <TextView 
     android:id="@+id/tv2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="8dp" 
     android:text="$400.00" > 
    </TextView> 
</TableRow> 
Cuestiones relacionadas