Dificultad con ScrollView y LinearLayout

Estoy tratando de hacer un diseño de Android: 3 componentes dentro de un LinearLayout vertical. El componente central es un ScrollView que contiene un TextView . Cuando TextView contiene una cantidad significativa de texto (más de lo que puede caber en la pantalla), ScrollView crece hasta la parte inferior de la pantalla, muestra las barras de desplazamiento y empuja el último componente, un LinearLayout con un Button dentro, pantalla.

Si el texto dentro de TextView dentro de ScrollView es lo suficientemente corto, el botón en la parte inferior de la pantalla se posiciona perfectamente.

El diseño que estoy tratando de lograr es:

El XML para el diseño que he escrito es:

 <?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"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFFFFF" android:layout_marginLeft="10dip" android:layout_marginRight="10dip" android:layout_marginTop="10dip" android:layout_marginBottom="10dip" android:text="Title /> <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:autoLink="web" android:textColor="#FFFFFF" android:background="#444444" android:padding="10dip" /> </ScrollView> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"> <LinearLayout android:orientation="horizontal" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1"/> <Button android:id="@+id/login_button" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_weight="1" android:text="@string/next_button"/> </LinearLayout> </LinearLayout> 

El scrollview es el segundo objeto de vista y se establece en wrap_content, que es más que la pantalla.

Recomiendo un RelativeLayout. Top textview primero con android:alignParentTop="true" , el linealLayout inferior junto con android:alignParentBottom="true" y el scrollview listado en último lugar en el xml con el valor android:alignBelow="@id/whatYouCallTheHeader .

Esto alineará la barra inferior en la parte inferior de la pantalla y la cabecera en la parte superior, sin importar el tamaño. Entonces, la vista de desplazamiento tendrá su propio lugar, después de haber colocado el encabezado y el pie de página.

Usted debe ir para relativeLayout en lugar de LinearLayout. Y puedes usar algunas propiedades como alignBelow y todas.

Trate de añadir un peso de diseño en el ScrollView es decir.

 <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1"> 

Esto funcionó para mí en una situación casi idéntica a la que usted está presentando, pero me dejó preguntándose por qué, porque es contra intuitivo que el aumento del peso de diseño de un control de 0 (el valor predeterminado si no especifica un layout_weight ) A 1 debe hacer un control que ya está utilizando demasiado espacio más pequeño.

Sospecho que la razón por la que funciona es que al no especificar un layout_weight que realmente permiten que el diseño de ignorar el tamaño de la vista de desplazamiento en relación con otros controles y, a la inversa, si se especifica uno le da permiso para reducirlo en proporción a los pesos que asigna .

! [Encabezado fijo-Pie de página y disposición del cuerpo desplazable] [1]


Esto es lo que estás buscando. La mayoría de la aplicación en android tenía este tipo de diseño, un encabezado fijo y un pie de página y un cuerpo desplazable. El xml para este diseño es


 <?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:background="#5599DD" android:layout_height="fill_parent"> <!-- Header goes here --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFFFFF" android:layout_marginLeft="10dip" android:layout_marginRight="10dip" android:layout_marginTop="10dip" android:layout_marginBottom="10dip" android:textSize="20sp" android:layout_gravity="center" android:text="Title" /> <!-- Body goes here --> <ScrollView android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:autoLink="web" android:text="@string/lorem_ipsum" android:textColor="#FFFFFF" android:padding="10dip" /> </ScrollView> <!-- footer goes here --> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/login_button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="bottom" android:layout_alignParentRight="true" android:text="Button"/> </RelativeLayout> </LinearLayout> </LinearLayout> 
  • Cuadrícula de imágenes dentro de ScrollView
  • Cómo agregar scrollview a keyboardView en android
  • Actualización de contenido de ScrollView
  • Margen redundante al agregar ImageView a ScrollView en Android
  • Cambiar el color de la barra de desplazamiento en Android
  • El teclado suave no activa el desplazamiento en un ScrollView
  • Scrollview con paginación en android
  • Desplazar una vista / disposición oculta desde abajo
  • Manejo de MotionEvent en ScrollView en Android
  • Cómo desplazar el edittext dentro de la vista de desplazamiento
  • Cómo convertir todo el contenido en una vista de desplazamiento a un mapa de bits?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.