studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android tablelayout

programacion - Problemas de formato de diseño de tabla de Android



manual de programacion android pdf (9)

No puedo hacer que mi TableLayout se ajuste dentro de la pantalla when the text cell is large , a pesar de que el texto se ajusta inside the cell .

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

¿Por qué? ¿Cómo puedo obligar a la mesa completa a permanecer dentro de la pantalla? Cualquier sugerencia es bienvenida.

Mi TableLayout es el 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); } }


Agregue android: 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 valores 1 son las columnas en las que desea que se produzcan los cambios. Puede especificar más de un valor como este:

android:stretchColumns="0,1"

o si quieres que los cambios ocurran en todas tus columnas como esta:

android:stretchColumns="*"

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


Descargo de responsabilidad: no soy muy bueno con los diseños, así que solo jugué un poco con algunos valores, y esto pareció funcionar (aunque no puedo dar una buena explicación de por qué):

<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 vi en la vista de diseño del editor xml, pero al menos se veía bien allí.


Espero que este código te ayude ... clase pública MainActivity 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>


Hay una solución temporal, hacer:

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

Aquí no funcionó ninguna solución en mi caso.


Puede que tenga que ver con el wrap_content para el ancho de sus celdas multilínea.

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


También puede intentar manipular stretchColumns y / o shrinkColumns en TableLayout.


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.


Tuve el mismo problema y lo resolví agregando

android:stretchColumns="0"

al elemento TableLayout y configuración

android:layout_width="0dp"

en el TextView que era demasiado largo.


en el diseño de la tabla, use la propiedad shrinkColumns para las columnas que desea que puedan encoger para el ajuste

La forma más fácil es:

<TableLayout android:shrinkColumns="*"/>

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

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

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