2011-01-13 16 views
6

Quiero crear un diseño, con LinearLayout (s) horizontales en la parte superior e inferior, un relleno ListView en el centro.Problema de diseño: ¿cómo colocar algo arriba y abajo?

¿Cómo puedo definir el main.xml.

Intenté crear un diseño con LinearLayout horizontal en la parte superior, TextView en la parte inferior, un relleno de ListView en el medio; está bien Pero después de modificar el TextView inferior a LinearLayout, el LinearLayout inferior desaparece.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     > 
     <TextView 
      android:textSize="12px" 
      android:text="something here" 
      android:layout_width="50px" 
      android:layout_height="wrap_content" 
      /> 
     <TextView 
      android:textSize="12px" 
      android:text="something here" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      /> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:gravity="bottom" 
     > 
     <ListView 
      android:id="@+id/listbody" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      /> 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      > 
      <TextView 
       android:layout_height="wrap_content" 
       android:layout_width="0dip" 
       android:layout_weight="1" 
       android:textSize="12px" 
       android:text="50%" 
       /> 
      <TextView 
       android:layout_height="wrap_content" 
       android:layout_width="0dip" 
       android:layout_weight="1" 
       android:textSize="12px" 
       android:text="50%" 
       /> 
     </LinearLayout> 
    </LinearLayout> 
</LinearLayout> 

¿Alguien le puede decir que lo recomiende? Por favor ayuda.

Respuesta

11

Probar que contiene todo el conjunto en un RelativeLayout:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:id="@+id/top_linear_layout_id" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" > 
    </LinearLayout> 

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/bottom_linear_layout_id" 
     android:layout_below="@id/top_linear_layout_id" /> 

    <LinearLayout 
     android:id="@+id/bottom_linear_layout_id" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" > 
    </LinearLayout> 
</RelativeLayout> 

Editado con la materia de dimensionamiento.

+0

¡Ahora la superposición LinearLayout con ListView! Creo que debería haber algún error en la definición de LinearLayout en la parte inferior. – chow

+0

No especialmente. Para el ListView, añadir: \t androide: layout_height = "wrap_content" \t androide: layout_width = "fill_parent" \t androide: layout_below = "@ id/top_linear_layout_id" \t androide: layout_above = "@ +/Identificación del bottom_linear_layout_id" Junto con los identificadores respectivos para los diseños lineales. – Estel

0

El problema sería que los está definiendo a ambos en relación con el tamaño del contenido que contienen, pero si el contenido combinado de ambos es más grande que la pantalla, entonces uno de ellos se superpondrá con el otro, usted sería mejor definir el layout_height usando una medida absoluta en un diseño lineal

3

Esto es lo que estás buscando. Estel está en el camino correcto con el RelativeLayout (aunque se puede hacer con un LinearLayout, creo que el enfoque RelativeLayout es más limpio) pero el diseño está fuera de servicio No importa, verifique el comentario de Estel que me demostró que estaba equivocado. :) Primero debe definir su encabezado, alinearlo a la parte superior; luego, defina su pie de página y alinéelo al fondo; Por último, declare su ListView, darle una altura de fill_parent, y lo puso a la disposición por encima del pie de página y debajo de la cabecera:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <LinearLayout 
     android:id="@+id/header" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:alignParentTop="true" 
     > 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/footer" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:alignParentBottom="true" 
     > 
    </LinearLayout> 

    <ListView 
     android:id="@+id/listview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_above="@id/footer" 
     android:layout_below="@id/header" 
     /> 
</RelativeLayout> 
+0

Fuera de interés, ¿cuánto importa el pedido en este caso? Si bien nos aseguramos explícitamente de que no haya superposición en el posicionamiento de ninguno de los widgets, ¿el orden de dibujo no es cada vez más redundante? – Estel

+0

Leyendo aquí: http://developer.android.com/guide/topics/ui/index.html#ViewHierarchy indica que el diseño se analiza en orden. Entonces, si ListView se declara antes del diseño del pie de página, toma todo el espacio desde debajo del encabezado hasta la parte inferior de la pantalla. Luego, el pie de página se dibujaría encima de ListView, ya que ListView no tiene conocimiento del pie de página en el momento en que se analiza. Quiero decir que lo he leído a partir de Android 2.2, la orden ya no importa (pero sigue siéndolo si está orientando las versiones anteriores), pero ahora no puedo encontrar una referencia definitiva. – kcoppock

+0

Una cosa que encontré http://developer.android.com/resources/articles/ui-1.6.html que puede ser pertinente es que 1.6 habilitó las referencias a recursos que están declarados más abajo en el árbol. ¿Esto es a lo que te refieres? – Estel

0

Gracias a todos por sus consejos y la dirección de RelativeLayout. Puedo arreglarlo ahora.

que tiene que definir la LinearLayout pie de página antes de la ListView, y definir ListView como Android: layout_alignParentTop = "true" y android: layout_above = "@ id/pie de página"

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
    > 
     <TextView 
      android:textSize="12px" 
      android:text="something here" 
      android:layout_width="50px" 
      android:layout_height="wrap_content" 
      /> 
     <TextView 
      android:textSize="12px" 
      android:text="something here" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
     /> 
    </LinearLayout> 
    <RelativeLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
    > 
     <LinearLayout 
      android:id="@+id/footer" 
      android:orientation="horizontal" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      android:layout_alignParentBottom="true" 
     > 

      <TextView 
       android:layout_height="wrap_content" 
       android:layout_width="0dip" 
       android:layout_weight="1" 
       android:textSize="12px" 
       android:text="50%" 
       /> 
      <TextView 
       android:layout_height="wrap_content" 
       android:layout_width="0dip" 
       android:layout_weight="1" 
       android:textSize="12px" 
       android:text="50%" 
      /> 

     </LinearLayout> 
     <ListView 
      android:id="@+id/tablebody" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_above="@id/footer" 
     /> 
    </RelativeLayout> 
</LinearLayout> 
0

Esto sin duda va a resolver su problema :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <HorizontalScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal"> 
      <TextView 
       android:textSize="12sp" 
       android:text="something here" 
       android:layout_width="50dp" 
       android:layout_height="wrap_content"/> 
      <TextView 
       android:textSize="12sp" 
       android:text="something here" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content"/> 
     </LinearLayout> 
    </HorizontalScrollView> 
    <ListView 
     android:id="@+id/listbody" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"/> 
    <HorizontalScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent"> 
      <TextView 
       android:layout_height="wrap_content" 
       android:layout_width="0dip" 
       android:layout_weight="1" 
       android:textSize="12sp" 
       android:text="50%"/> 
      <TextView 
       android:layout_height="wrap_content" 
       android:layout_width="0dip" 
       android:layout_weight="1" 
       android:textSize="12sp" 
       android:text="50%"/> 
     </LinearLayout> 
    </HorizontalScrollView> 
</LinearLayout> 
Cuestiones relacionadas