Android: ¿contenido LinearLayout distribuido dinámicamente?

He intentado todo lo que hay que intentar y empiezo a sospechar que esto no es realmente posible.

Lo que estoy buscando es una distribución dinámica de N niños en un LinearLayout (horizontal) basado en sus anchos. Algo así como lo hace una tabla HTML, calculando dinámicamente los anchos de columna. Básicamente, quiero convertir mi ListView en una tabla con anchos calculados dinámicamente, como tal:

<table class="ListView">
  <tr class="LinearLayout"><td class="TextView">John:</td><td class="TextView">123-456-789</td></tr>
  <tr class="LinearLayout"><td class="TextView">Mike:</td><td class="TextView">321-654-987</td></tr>
  <tr class="LinearLayout"><td class="TextView">Sally:</td><td class="TextView">789-456-123</td></tr>
</table>

¿Cómo hago algo así en Android? Recuerda, no solo quiero dividirlo en dos partes igualmente largas. Necesito el contenido para determinar el ancho de columna. y llenar todo el LinearLayout. Así (asumiendo que solo hay dos elementos secundarios):

[ [--TextView--] [--------TextView--------] ]

preguntado el 25 de agosto de 12 a las 01:08

3 Respuestas

No es posible usar LinearLayout. Debes usar un TableLayout con todos los elementos del TableRow' having widthenvolver_contenido`. Si el número de filas que se mostrarán es dinámico, entonces debe crear e insertar filas en ViewGroup dinámicamente; de ​​lo contrario, es bastante sencillo para los datos estáticos.

Respondido 25 ago 12, 03:08

puedes configurar android:layout_weight="1" por todos tus TextView in TableRow, pero usando demasiado peso es malo para el rendimiento.

Respondido 25 ago 12, 02:08

Eso no va a funcionar. Divide el LinearLayout en igual porciones Los anchos no estarán determinados por el contenido. Es lo mismo que configurar "table-layout:fixed;" a una tabla HTML en CSS cuando en realidad debería ser "table-layout:auto;". - Mae

ah, olvidé algo, ¿estableciste el ancho en wrap_content en lugar de 0dp? - apriano

Si hago eso, los elementos no llenarán todo el espacio en LinearLayout. - Mae

se llenará, si configuras layout_weight a 1. - apriano

Podrías estar en algo. Lo intentaré mañana. - Mae

¿Supongo que estás buscando algo como esto?

<?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="fill_parent"
    android:orientation="vertical" >

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

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="This will take up much more space"
            android:layout_weight="20" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="test"
            android:layout_weight="80" />
    </LinearLayout>

</LinearLayout>

Cómo se vería.

NOTA: El fondo de "Esto ocupará mucho más espacio" es gris, porque tomé la captura de pantalla mientras pasaba el mouse sobre ese TextView para que se vea en toda su longitud.

Respondido 25 ago 12, 02:08

Ha configurado manualmente la relación de peso (20:80). Si el segundo TextView contiene una cadena más larga, no se cambiará el tamaño. - Mae

Estoy pensando que PODRÍAS poder cambiar el peso dinámicamente a través de Java, pero no pude encontrar nada en la documentación. - maletín

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.