2011-03-27 10 views
9

Tengo dificultades para obtener los resultados de diseño de la GUI que quiero en una aplicación de Android.Desplazamiento de texto arriba de los botones, botones fijos en la parte inferior

Una breve descripción de lo que quiero:

La interfaz gráfica de usuario es incluir dos TextViews y cuatro botones.

Los cuatro botones deben colocarse horizontalmente, todos en la misma fila y fijados en la esquina inferior derecha de la pantalla.

El primero de los dos TextViews debe comenzar en la parte superior de la pantalla, con contenidos de texto que varían de una línea a muchas docenas de líneas, más de las que caben en la pantalla sin desplazarse. Por lo tanto, el desplazamiento a veces es necesario para ver todos los contenidos. Incluso cuando es necesario desplazarse, los botones no deben participar en el desplazamiento: deben permanecer siempre fijos en una sola fila en la parte inferior derecha de la pantalla. Cuando es necesario desplazarse, el texto desplazable siempre debe estar encima de los botones; los botones no deben superponerse al texto.

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

restricciones adicionales incluyen que yo quiero la disposición para buscar decente en todos los siguientes dispositivos Android, en ambos diseños de pantalla vertical y horizontal: (320x240) los dispositivos

  • Android 1.5 API3 QVGA MDPI
  • Android 1,5 dispositivos API3 HVGA MDPI
  • dispositivos Android 1.6 API4 QVGA LDPI
  • dispositivos Android 2.3 API10 WVGA800
  • Todo con pantallas de entre el dev anteriormente ices

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

-

He probado muchas combinaciones diferentes de diseños, pero aún nada ha llegado muy cerca de la meta.

(Con algunas de las combinaciones de diseño que probé, puedo arreglar los botones en la esquina inferior izquierda de la pantalla con RelativeLayout, pero todo lo que intento con el texto siempre resulta con el texto desplazándose detrás de los botones: los botones superponer el texto. No he encontrado que los botones se alineen en la parte inferior derecha.)

Si alguien está dispuesto a ayudarme a resolver esto, el ejemplo de diseño xml a continuación es un punto de inicio de la conversación, pero Definitivamente no logra el resultado de la meta, como se demuestra en las siguientes capturas de pantalla, generadas usando este mismo ejemplo de diseño xml. (Aunque algunas de las capturas de pantalla demuestran el mismo problema, que 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 debe 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 estar alineados con la parte inferior derecha de la pantalla.

-

1.5_API3_QVGA_240x320_MDPI - short_text:
1.5_API3_QVGA_240x320_MDPI - short_text

Edición: cuarto botón se rompe. Prefiere el texto en los primeros tres botones para envolver cuando sea necesario, dejando suficiente espacio para mostrar el cuarto botón.

-

1.5_API3_QVGA_320x240_MDPI - short_text:

Problema: Los botones deben estar alineados 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 ocupa casi toda la pantalla, la fila de botones se rompieron de. La fila de botones no se debe romper, y se debe fijar 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 estar alineados 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, scrollbar at top

Problema: Los botones no están en la pantalla. Deben estar fijos en la parte inferior derecha de la pantalla.

-

1.6_API4_QVGA_Horizontal_LDPI - very_long_text, barra de desplazamiento en la parte inferior:
1.6_API4_QVGA_Horizontal_LDPI - very_long_text, scrollbar at bottom

Problema: Los botones están en ninguna parte ser encontrado, aunque la barra de desplazamiento de texto está en el fondo. Deben estar fijos 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 estar alineados con la parte inferior derecha de la pantalla.

-

Algún consejo?

-

Información adicional: Cuando trato de utilizar RelativeLayout, y fijar los botones en la parte inferior de la pantalla con android:layout_alignParentBottom="true", entonces mi problema es que no sé cómo solucionar el fondo de la vista de desplazamiento con la parte superior de los botones. El uso de android:layout_alignBottom="@id/buttons" simplemente alinea la parte inferior de la vista de desplazamiento con la parte inferior de los botones, pero luego los botones de superponer el texto, así:

-

Actualización: El problema de la fijación de los botones a la abajo a la derecha, con el texto desplazable sobre los botones se resuelve.

Aquí está el XML de diseño modificado 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 publicaré una nueva pregunta.

+0

Tuve el mismo problema y me quedé perplejo. ¿Quién hubiera pensado que ScrollView necesitaba una altura de 0dp? Bueno, yo no (hasta que vi esto). ¡Gracias! –

Respuesta

12

Configure su layout_height de ScrollView en 0dp y establezca su layout_weight en 1. Esto debería presionar los botones hacia la parte inferior de la pantalla, pero no más.

+0

Intenté esta sugerencia, pero solo hace desaparecer las vistas de texto de la pantalla, y los botones se alinean en la parte superior. –

+0

@Thane - Eso no debería suceder. ¿Puedes publicar el XML que tiene este comportamiento? –

+0

Ante su insistencia, intenté hacer el cambio nuevamente, y estoy obteniendo un mejor resultado. Tal vez cometí otro error al intentar esto antes. Ahora probando ... –

4

Cambie el diseño utilizado para RelativeLayout, esto le ayudará a colocar sus 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 desplazamiento que puede ser de longitud variable.

EDITAR

acabo de cambiar el código para esto y funcionó bien para mí en mi HTC Desire. Es de esperar que trabaje en sus casos de prueba. Terminó simplemente usando un diseño lineal, pero parece estar 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> 
+0

Con RelativeLayout, todo lo que probé dio como resultado que el texto se desplazara por debajo de los botones: los botones se superponían al texto. Eso no es lo que quiero. –

+0

Haga que los botones se definan primero, y alinéelos al fondo de los padres, luego haga que la vista de desplazamiento alinee la parte superior del padre y alinee la parte inferior a la barra de botones – Kurru

+0

Eso es lo que quiero hacer, pero no he podido averiguarlo. ¿Puedes publicar el código para hacerlo? –

Cuestiones relacionadas