No se puede obtener el diseño adecuado con "fill_parent"

Estoy tratando de crear este diseño sencillo en Android.

Introduzca aquí la descripción de la imagen

A debe ajustarse a su contenido y left|center_vertical align.

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

C debe ser alineado a la derecha, envoltura para llenar su contenido y también estar alineado center_vertical .

Aquí está 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 esta disposición, C se empuja fuera de la pantalla. ¿Cómo puedo hacer que este diseño funcione?

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".

El truco, utilice un diseño relativo … aquí está un ejemplo (fuera de la parte superior de mí la cabeza – no marcado y faltan campos de altura y vertical alinear los ajustes para que sea fácil 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> 

Editar: aquí está con los errores tipográficos limpios (y se prueba como trabajando)

 <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> 

Prueba esto. He reemplazado ImageViews con TextViews para que aparezcan en el editor XML más fácil. Tenga en cuenta que he mantenido el ancho de 48px en "A", que no es algo que creo que realmente quieres tener. Sustitúyalo por 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> 

Aquí está mi respuesta. Acabo de establecer el layout_weight en B para ser 1 . Evidentemente, layout_weight es algo así como un enfoque basado en porcentajes. No sé cómo funciona, pero aquí está mi producto terminado, luciendo genial:

 <?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> 
  • ¿Qué son paddingStart y paddingEnd?
  • Comparación de componentes de la interfaz de usuario de Android y iPhone
  • AlertDialog con vista personalizada: redimensionar para ajustar el contenido de la vista
  • Vista personalizada de Android delegado de grupo addView
  • Hacer dos vistas de texto en diseño relativo ocupar el 50% de altura
  • Android El teclado suave flotará solo un diseño específico
  • ¿Cómo mantener los atributos de diseño en la vista personalizada android combinada?
  • Cómo obligar a RecyclerView a desplazarse cuando no hay suficientes elementos para llenar la altura de la sceen
  • Android DrawerLayout falla al usar las gravedades TOP e BOTTOM
  • Android Scrollview Desplazamiento automático hacia arriba
  • Leer el tamaño de diseño al inicio de la aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.