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.
- Android: Notificar a Scrollview que el tamaño de su hijo ha cambiado: ¿cómo?
- ¿Volver a calcular ScrollView en diferentes vistas de ViewFlipper?
- ScrollView no cambia de tamaño directamente después de cambios secundarios
- ¿Cómo puedo obtener una función de paginación en vista de desplazamiento horizontal sin ViewPager?
- Android captura todos los eventos de movimiento y los envía a los niños
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>
- ScrollView con botones en el interior, sin respuesta hasta el segundo clic en cualquier botón dentro
- ScrollView oculta el diseño lineal inferior
- ¿Cómo mostrar una imagen que es más grande que las dimensiones de la pantalla del teléfono?
- Centro de contenido en vista de desplazamiento
- Ocultar FAB en NestedScrollView al desplazarse
- Uso del método smoothScrollBy en la clase ScrollView de Android
- MonoDroid: Error al llamar al constructor de la vista personalizada - TwoDScrollView
- Android: ¿Detectar cuando ScrollView ha terminado de desplazarse y rebotar de nuevo?
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>
- Problemas con la detección de gestos en ListView
- Otra actividad aparece y cubre la mitad del tamaño de la pantalla