Desplazamiento de texto por encima de los botones, botones fijos en la parte inferior

Tengo dificultades para obtener los resultados del diseño de GUI que deseo en una aplicación para Android.

Una breve descripción de lo que quiero:

La GUI debe incluir dos TextViews y cuatro botones.

Los cuatro Botones deben ser colocados horizontalmente, todos en la misma fila y fijados en la parte inferior derecha de la pantalla.

El primero de los dos TextViews es comenzar en la parte superior de la pantalla, con un contenido de texto que varía de una línea a muchas decenas de líneas, más de lo que cabrá en la pantalla sin desplazamiento. Por lo tanto, desplazamiento es a veces necesario para ver todos los contenidos. Incluso cuando el desplazamiento es necesario, los botones no son para participar en el desplazamiento: siempre deben permanecer fijos en una sola fila en la parte inferior derecha de la pantalla. Cuando el desplazamiento es necesario, el texto de desplazamiento debe estar siempre por encima de los botones – los botones no deben superponer el texto.

El segundo de los dos TextViews debe aparecer inmediatamente debajo del primer TextView, y normalmente sólo agregará una o dos líneas a la longitud total del texto. Cuando es necesario desplazarse, el segundo TextView debe desplazarse con el primer TextView, siempre apareciendo inmediatamente debajo del primer TextView.

Otras restricciones incluyen que deseo que el diseño aparezca decente en todos los dispositivos Android siguientes, tanto en los diseños de pantalla verticales como horizontales:

  • Dispositivos MDPI (320×240) de Android 1.5 API3 QVGA
  • Dispositivos MDPI Android 1.5 API3 HVGA
  • Android 1.6 API4 dispositivos QVGA LDPI
  • Dispositivos Android 2.3 API10 WVGA800
  • Todo con pantallas entre los dispositivos anteriores

Me preocuparé por las tabletas otro día (como mañana).

He intentado muchas combinaciones diferentes de Layouts, pero nada todavía ha llegado muy cerca de la meta.

(Con algunas de las combinaciones de diseño que he intentado, puedo arreglar los botones en la parte inferior izquierda de la pantalla con RelativeLayout, pero todo lo que intento con el texto de escaneo siempre resulta con el desplazamiento de texto detrás de los botones – los botones superponen el texto. No he pensado conseguir los botones para alinear a la parte inferior derecha.)

Si alguien está dispuesto a ayudarme a entender esto, el ejemplo de diseño xml a continuación es un punto de partida de conversación, pero definitivamente no logra el resultado de objetivo, como se demuestra en las siguientes capturas de pantalla, generadas utilizando este mismo ejemplo de diseño xml. (Aunque algunas de las capturas de pantalla muestran el mismo problema, ayudan a mostrar dónde estoy con las diferentes pantallas.)

<?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="wrap_content"> <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Text View 1. Text varies from a few lines to many more lines than what fits on the screen. Scrolling is necessary to see it all." /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Text View 2. Short text entry sits below Text View 1." /> </LinearLayout> </ScrollView> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/button_1" android:layout_height="fill_parent" android:layout_width="wrap_content" android:text="Button 1" /> <Button android:id="@+id/button_2" android:layout_height="fill_parent" android:layout_width="wrap_content" android:text="Button 2" /> <Button android:id="@+id/button_3" android:layout_height="fill_parent" android:layout_width="wrap_content" android:text="Button 3" /> <Button android:id="@+id/button_4" android:layout_height="fill_parent" android:layout_width="wrap_content" android:text="Button 4" /> </LinearLayout> </LinearLayout> 

1.5_API3_HVGA_Horizontal_MDPI – short_text:
1.5_API3_HVGA_Horizontal_MDPI - short_text

Problema: Los botones deben alinearse con la parte inferior derecha de la pantalla.

1.5_API3_HVGA_Vertical_MDPI – short_text:
1.5_API3_HVGA_Vertical_MDPI - short_text

Problema: Los botones deben alinearse con la parte inferior derecha de la pantalla.

1.5_API3_QVGA_240x320_MDPI – short_text:
1.5_API3_QVGA_240x320_MDPI - short_text

Problema: Se ha roto el botón 4. Prefiera el texto en los tres primeros botones para envolver cuando sea necesario, dejando suficiente espacio para mostrar el 4to botón.

1.5_API3_QVGA_320x240_MDPI – short_text:
1.5_API3_QVGA_320x240_MDPI - short_text

Problema: Los botones deben alinearse con la parte inferior derecha de la pantalla.

1.6_API4_QVGA_Horizontal_LDPI – long_text:
1.6_API4_QVGA_Horizontal_LDPI - long_text

Problema: Cuando el texto casi llena la pantalla, la fila de botones se rompe. La fila de botones no se debe romper, y debe fijarse en la parte inferior derecha de la pantalla. El texto debe desplazarse por encima de los botones.

1.6_API4_QVGA_Horizontal_LDPI – short_text:
1.6_API4_QVGA_Horizontal_LDPI - short_text

Problema: Los botones deben alinearse con la parte inferior derecha de la pantalla.

1.6_API4_QVGA_Horizontal_LDPI – very_long_text, barra de desplazamiento en la parte superior:
1.6_API4_QVGA_Horizontal_LDPI - very_long_text, barra de desplazamiento en la parte superior

Problema: Los botones no aparecen en la pantalla. Deben fijarse en la parte inferior derecha de la pantalla.

1.6_API4_QVGA_Horizontal_LDPI – muy_long_texto, barra de desplazamiento en la parte inferior:
1.6_API4_QVGA_Horizontal_LDPI - muy_long_texto, barra de desplazamiento en la parte inferior

Problema: los botones no se encuentran donde se encuentran, aunque la barra de desplazamiento de texto está en la parte inferior. Deben fijarse en la parte inferior derecha de la pantalla.

1.6_API4_QVGA_Vertical_LDPI – short_text:
1.6_API4_QVGA_Vertical_LDPI - short_text

Problema: Los botones deben alinearse con la parte inferior derecha de la pantalla.

¿Algún consejo?

Información adicional: Cuando intento usar RelativeLayout, y arreglar los botones en la parte inferior de la pantalla con android:layout_alignParentBottom="true" , entonces mi problema es que no sé cómo arreglar la parte inferior de la vista de desplazamiento con el Parte superior de los botones. Uso de android:layout_alignBottom="@id/buttons" sólo alinea la parte inferior de la vista de desplazamiento con la parte inferior de los botones, pero luego los botones superponen el texto, como esto:

Actualización: El problema de la fijación de los botones a la parte inferior derecha, con el texto de desplazamiento por encima de los botones se resuelve.

Aquí está el XML de diseño cambiado que funciona hasta ahora (pegue más texto en la vista de texto 1 si desea ver el desplazamiento):

 <?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"> <ScrollView android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Text View 1. Text varies from a few lines to many more lines than what fits on the screen. Scrolling is necessary to see it all." /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Text View 2. Short text entry sits below Text View 1." /> </LinearLayout> </ScrollView> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="right"> <Button android:id="@+id/button_1" android:layout_height="fill_parent" android:layout_width="wrap_content" android:text="Button 1" /> <Button android:id="@+id/button_2" android:layout_height="fill_parent" android:layout_width="wrap_content" android:text="Button 2" /> <Button android:id="@+id/button_3" android:layout_height="fill_parent" android:layout_width="wrap_content" android:text="Button 3" /> <Button android:id="@+id/button_4" android:layout_height="fill_parent" android:layout_width="wrap_content" android:text="Button 4" /> </LinearLayout> </LinearLayout> 

Tengo un problema restante para el que voy a publicar una nueva pregunta.

Establezca el valor de layout_height de ScrollView en 0dp y establezca su valor de layout_weight en 1. Debe empujar los botones a la parte inferior de la pantalla, pero no más.

Cambiar el diseño utilizado para un RelativeLayout, esto le ayudará a adjuntar los botones en la parte inferior de la pantalla.

También estoy de acuerdo con el uso de layout_height = "0dip" y layout_weight = "1" en el scrollable que puede ser de varrying longitud.

EDITAR

Acabo de cambiar el código a esto y funcionó bien para mí en mi HTC Desire. Debería funcionar en sus casos de prueba. Acabé usando un diseño lineal, pero parece bien.

 <?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"> <ScrollView android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" > <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Text View 1. Text varies from a few lines to many more lines than what fits on the screen. Scrolling is necessary to see it all." /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Text View 2. Short text entry sits below Text View 1." /> </LinearLayout> </ScrollView> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/button_1" android:layout_height="fill_parent" android:layout_width="0dip" android:layout_weight="1" android:text="Button 1" /> <Button android:id="@+id/button_2" android:layout_height="fill_parent" android:layout_width="0dip" android:layout_weight="1" android:text="Button 2" /> <Button android:id="@+id/button_3" android:layout_height="fill_parent" android:layout_width="0dip" android:layout_weight="1" android:text="Button 3" /> <Button android:id="@+id/button_4" android:layout_height="fill_parent" android:layout_width="0dip" android:layout_weight="1" android:text="Button 4" /> </LinearLayout> </LinearLayout> 
  • Android: NPE en TabSpec setContent (Ver)
  • Cómo agregar otro EditText cuando haga clic y llenar otro (Android)
  • ¿Cómo podemos diseñar interfaces de usuario en Eclipse?
  • Recortar el área circular del mapa de bits en Android
  • ¿Cómo probar si una vista fragmentada es visible para el usuario?
  • Establecer ventana transparente en el cuadro AlertDialog
  • Diseño deslizante como google maps v7
  • Posición personalizada de la pista en el cuadro de edición de texto.
  • ¿Cómo puedo crear un 'Pulse' como la interfaz de usuario para una aplicación de Android
  • Crear pestañas más pequeñas en Android
  • Trabajar con diseñadores de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.