2011-03-10 9 views
9

Estoy intentando crear este diseño simple en Android.No se puede obtener el diseño correcto con "fill_parent"

enter image description here

Un debe envolver para adaptarse a su contenido y left|center_vertical align.

B debe expandirse tanto como sea posible, llenando todo el espacio vacío.

C debe alinearse a la derecha, envolverse para llenar su contenido y también alinearse center_vertical.

Aquí es mi diseño:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     android:gravity="left|center_vertical"> 
    <!-- A --> 
    <ImageView android:id="@+id/example_item_icon" 
      android:layout_width="48px" 
      android:layout_height="48px"/> 
    <!-- B --> 
    <LinearLayout android:orientation="vertical" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:gravity="left|center_vertical" 
      android:padding="5px"> 

     <TextView android:id="@+id/example_item_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textStyle="bold"/> 

     <TextView android:id="@+id/example_item_level_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textStyle="bold|italic" 
       android:lines="1" 
       android:textSize="10px"/> 
    </LinearLayout> 
    <!-- C --> 
    <TextView android:id="@+id/example_item_count_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textStyle="bold" 
      android:textSize="14px"/> 
</LinearLayout> 

En este diseño, C es empujado fuera de la pantalla. ¿Cómo puedo hacer que este diseño funcione?

Respuesta

19

fill_parent significa "ser tan grande como el padre", no "usar el espacio vacío restante". En lugar de fill_parent, solo usa android: layout_width = "0dip" y android: layout_weight = "1".

+0

Oh, gotcha. Supuse que 'fill_parent' significa' expandir tanto como sea posible para llenar el padre', a diferencia de 'match_parent' =' literalmente coincide con el tamaño del padre'. –

+1

match_parent es el nuevo nombre de fill_parent :) –

+0

Epic win. \ m/:) –

0

Pruebe esto. Reemplacé el ImageViews con TextViews para mostrarlo en el editor XML más fácilmente. Tenga en cuenta que mantuve el ancho de 48 píxeles en "A", que no es algo que realmente desee tener. Reemplácelo con wrap_content.

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

    <!-- A --> 
    <TextView android:layout_height="48px" 
    android:id="@+id/example_item_count_text2" 
    android:textSize="14px" 
    android:layout_weight="1" 
    android:text="this is item a" 
    android:textStyle="bold" 
    android:layout_width="48px"> 
    </TextView> 

    <!-- B --> 
    <LinearLayout android:orientation="vertical" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:gravity="center_vertical" 
      android:layout_weight="1" 
      android:padding="5px"> 

     <TextView android:id="@+id/example_item_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="this is B" 
       android:textStyle="bold"/> 

     <TextView android:id="@+id/example_item_level_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="this should be underneath B" 
       > 
    </LinearLayout> 

    <!-- C --> 
    <TextView android:id="@+id/example_item_count_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="this is item c" 
      android:layout_weight="1" 
      android:textStyle="bold" 
      android:textSize="14px"/> 
</LinearLayout> 
2

el truco, utilizan una disposición relativa ... he aquí un ejemplo (de la parte superior de mi cabeza - no se comprueba y faltan los campos de altura y la configuración de Alineación vertical para que sea fácil de ver las cosas importantes).

<relativelayout android:width="fillParent"> 
    <textview android:id="@+id/left" android:text="left" 
       android:width="wrap_content" 
       android:layout_alignParentleft="true" /> 
    <textview android:id="@+id/right" android:text="right" 
       android:width="wrap_content" 
       android:layout_alignParentright="true" /> 
    <textview android:id="@+id/middle" android:text="middle" 
       android:width="wrap_content" 
       android:layout_alignleft="@id/right" android:layout_alignright="@id/left" /> 
</relativelayout> 

edición: aquí es con los errores tipográficos limpios (y se prueba como el trabajo)

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
<TextView 
    android:id="@+id/left" 
    android:text="left" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" /> 
<TextView 
    android:id="@+id/right" 
    android:text="right" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" /> 
<TextView 
    android:id="@+id/middle" 
    android:text="middle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@id/right" 
    android:layout_toRightOf="@id/left" /> 
</RelativeLayout> 
+0

textview middle es wrap_content, no expande – max4ever

+0

funciona con width = wrap_content en la vista de texto del medio. Agregué una versión con los errores tipográficos corregidos, pruébalo. – SteelBytes

+0

¡Agradable!Parece que usar "toLeftOf"/"toRightOf" fuerza a "middle" a expandirse hasta que llena todo el espacio vacío entre "right" e "left", es decir, es el equivalente (aproximado) de layout_weight de LinearLayout. ¡Gracias! –

0

Aquí es mi respuesta. Acabo de configurar el layout_weight en B para que sea 1. Evidentemente, layout_weight es algo así como un enfoque de diseño basado en porcentaje. No sé cómo funciona, pero aquí está mi producto terminado, que se ve muy bien:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     android:gravity="left|center_vertical"> 

    <ImageView android:id="@+id/example_item_icon" 
      android:layout_width="48px" 
      android:layout_height="48px"/> 

    <LinearLayout android:orientation="vertical" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:gravity="left|center_vertical" 
      android:layout_weight="1" 
      android:padding="5px"> 

     <TextView android:id="@+id/example_item_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textStyle="bold"/> 

     <TextView android:id="@+id/example_item_level_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textStyle="bold|italic" 
       android:lines="1" 
       android:textSize="10px"/> 
    </LinearLayout> 

    <TextView android:id="@+id/example_item_count_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textStyle="bold" 
      android:textSize="14px"/> 
</LinearLayout> 
Cuestiones relacionadas