2011-09-04 29 views
9

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 el TextView contiene una cantidad significativa de texto (más de lo que cabe en la pantalla), el 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, fuera del 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 coloca perfectamente.

La disposición que estoy tratando de lograr es:Dificultad con ScrollView y LinearLayout

El XML para el diseño de lo 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> 

Respuesta

6

El ScrollView es el segundo objeto vista y está configurado en wrap_content, que es más que la pantalla.

Recomiendo un RelativeLayout. Vista de texto superior primero con android:alignParentTop="true", el LinearLayout inferior siguiente con android:alignParentBottom="true" y la vista de desplazamiento aparece 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 el encabezado en la parte superior, sin importar el tamaño. Entonces la vista de desplazamiento tendrá su propio lugar, después de que se hayan colocado el encabezado y el pie de página.

+0

Si usted está escribiendo para 1.6 como un objetivo que sólo tiene un paso a través del XML, por lo que cualquier referencia tiene que ser presentado antes de que se hace referencia. 2.1+ hace dos pases. – Phobos

2

debe ir para relativeLayout en lugar de LinearLayout. Y puede usar algunas propiedades como alignBelow y todo.

2

Intente agregar un peso de diseño en 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ó preguntaba por qué, porque es contrario a la intuición de que el aumento del peso diseño de un control de 0 (el valor por defecto si no especifique un layout_weight) a 1 debería hacer un control que ya está usando demasiado espacio más pequeño.

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

2

! [Fijo de encabezado y pie y el diseño del cuerpo desplazable] [1]


Esto es lo que busca. La mayor parte de la aplicación en Android tenía este tipo de diseño, , un encabezado y pie de página fijo y un cuerpo desplazable. El XML de 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> 
Cuestiones relacionadas