Problemas con el diseño de XML de Android

Realmente lo intenté, pero no puedo entender cómo Android interpreta la configuración de layout_weight

Lo que estoy tratando de lograr es

  • Una cabecera en la parte superior con una altura fija
  • Un área de entrada en la parte inferior que contiene un EditText y un botón
  • Una parte de contenido en el medio que está tomando todo lo que queda del espacio

Al escribir me gustaría hacer crecer el EditText a una altura específica y empezar a desplazarse si el texto ingresado excede la altura disponible. Haciendo esto, necesito que el LinearLayout rodea crezca junto con el EditText.

Si defino una altura específica para el LinearLayout interno, no crecerá. Si no lo hago, el diseño interno toma todo el espacio en lugar del ScrollView, no importa lo que intente usar layout_weight . 🙁

Mi XML actual se ve así:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="I'm a header" /> <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="bottom"> <LinearLayout android:id="@+id/itemContainer" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </ScrollView> <LinearLayout android:layout_width="fill_parent" android:layout_height="50dp" android:padding="2dp" android:gravity="bottom" android:isScrollContainer="true" android:background="@drawable/steel" > <EditText android:id="@+id/edittext01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.2" android:scrollbars="vertical" android:fadingEdge="vertical" android:fadingEdgeLength="60dp" android:maxHeight="40dp" android:textSize="15sp" /> <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.8" android:layout_gravity="right" android:text="Send" android:textStyle="bold" android:textSize="15sp" /> </LinearLayout> </LinearLayout> 

¡Cualquier extremidad es apreciada grandemente!

layout_weight se utiliza para determinar cómo Android divide a cualquier izquierda sobre el espacio después de que los diversos widgets obtener todo el espacio que quieren.

Así que digamos que tiene 3 widgets en una fila, cada uno de los cuales quiere 10 píxeles, pero tiene 50 píxeles de espacio. Estos son algunos ejemplos de layout_weights y el número de píxeles que cada widget reclamará:

 widget1: weight = 1, 30px widget2: weight = 0, 10px widget3: weight = 0, 10px widget1: weight = 1, 20px widget2: weight = 1, 20px widget3: weight = 0, 10px widget1: weight = 1, 16.5px widget2: weight = 1, 16.5px widget3: weight = 1, 16.5px 

Usted puede pensar en el peso como un porcentaje del espacio disponible. Se sumará todos los valores, y luego dar a las porciones, según proceda. Por lo tanto, si te ayuda puedes usar pesos que sumen hasta 100 para hacer porcentajes:

 widget1: weight = 0, 10px widget2: weight = 25, 15px widget3: weight = 75, 25px 

Si entiendo correctamente, desea que el widget inferior comience en un tamaño determinado, luego expanda hasta un tamaño máximo si es necesario y, a continuación, desplácese.

Y, usted quiere que el widget por encima de él para hacerse cargo de todo el espacio extra.

Desafortunadamente en Android no es posible especificar un tamaño máximo. Creo que lo mejor que puedes hacer es darle al ScrollView un tamaño fijo, con un layout_weight = 1 y decirle a la parte inferior LinearLayout a wrap_content. Esto (creo) hace que el LinearLayout se expanda hasta que no puede más, porque el ScrollView ya ha reclamado el espacio.

Sin embargo, el desafío es especificar un tamaño fijo para el ScrollView que tiene sentido en todos los diferentes tamaños de pantalla y resoluciones. Usted podría terminar teniendo que crear diferentes diseños para las diferentes resoluciones, que probablemente no vale la pena. Personalmente, me gustaría dar el editText un tamaño fijo …

He tenido un problema similar (un pie de página con la marca de tiempo de actualización que se pegue en la parte inferior de la pantalla y un ListView / ScrollView ocupar todo el espacio restig) y después de muchos intentos que trabajó para mí con el siguiente diseño:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@+id/refresh_date_text" android:layout_alignParentTop="true" android:orientation="vertical" > <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF" android:layout_weight="1" android:divider="@drawable/list_divider" android:dividerHeight="1dp" android:drawSelectorOnTop="false" /> <TextView android:id="@android:id/empty" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" android:gravity="center_horizontal" android:paddingTop="10dp" android:text="The list is empty."/> </LinearLayout> <TextView android:id="@+id/refresh_date_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:gravity="center_horizontal" android:background="#f0f0f0" android:textStyle="italic" android:textSize="12dp" /> </RelativeLayout> 

No recortar el ListView cuando con un scroller, la alineación perfecta en todas las orientaciones, mostrando correctamente el texto "lista está vacío".

Creo que estarías mejor con un RelativeLayout. Agregue su encabezado y layout_alignParentTop="true" en layout_alignParentTop="true" . A continuación, agregue su EditText y Button, establezca esa área en layout_alignParentBottom="true" . A continuación, agregue el área central, establezca el ancho y la altura en fill_parent y configure layout_above="{the id of the EditText/Button layout}" , y layout_below="{the id of the header layout}" .

No tengo Eclipse en el trabajo, de lo contrario lo probaría por usted, pero eso debería funcionar.

 <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightSum="1" > <TextView android:text=" TextView " android:textColor="#ffffff" android:textSize="15sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#ff0000" /> <EditText android:text=" EditText " android:textSize="15sp" android:layout_width="250dp" android:layout_weight="1" android:layout_height="0dp" /> <Button android:text=" button " android:textColor="#000000" android:textSize="15sp" android:gravity="center_vertical|center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 

Esto ayudará

  • ¿Cómo obligo a eclipse a mostrar diseños y estilos xml como texto?
  • LibGDX leer archivo XML
  • ¿Es posible editar Androidmanifest.XML Después de empacar el APK?
  • Equivalencia de setTag (clave, valor) en XML
  • Android Create Drawable XML with Image esquinas redondeadas
  • Almacenar datos estáticos en Android - recurso personalizado?
  • Cómo obtener el ancho en píxeles de vista con android: layout_width = "wrap_content"?
  • Android: idioma predeterminado de strings.xml
  • Android Databinding: "Referencias de métodos con '.' es obsoleto"
  • ¿Cómo hacer un botón que muestra el carácter de retroceso (⌫) en Android?
  • Cambiar el tamaño del mapa de bits dentro de una lista de capas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.