2012-04-18 11 views
97

Tengo un RelativeLayout dentro de ScrollView. Mi RelativeLayout tiene android:layout_height="match_parent" pero la vista no toma el tamaño completo, es como un wrap_content.Ver dentro de ScrollView no ocupa todo

¿Hay alguna forma de tener el comportamiento real fill_parent/match_parent?

Mi diseño:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

    <ImageView 
    android:id="@+id/top" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:scaleType="fitXY" 
    android:src="@drawable/top" /> 

    <ImageView 
    android:id="@+id/header" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/top" 
    android:scaleType="fitXY" 
    android:src="@drawable/headerbig" /> 

    <ImageView 
    android:id="@+id/logo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBottom="@+id/header" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="3dp" 
    android:src="@drawable/logo" /> 

    <ScrollView 
    android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@+id/bottom" 
    android:layout_below="@+id/logo" 
    android:background="@drawable/background" > 

     <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

      <ImageView 
      android:id="@+id/dashboard01" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_above="@+id/dashboard02" 
      android:layout_centerHorizontal="true" 
      android:layout_marginBottom="30dp" 
      android:src="@drawable/dashboard01" 
      android:visibility="visible" /> 

      <ImageView 
      android:id="@+id/dashboard02" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:layout_alignParentRight="true" 
      android:layout_marginRight="10dp" 
      android:src="@drawable/dashboard02" /> 

      <ImageView 
      android:id="@+id/dashboard03" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/dashboard02" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="40dp" 
      android:src="@drawable/dashboard03" 
      android:visibility="visible" /> 
     </RelativeLayout> 
    </ScrollView> 

    <ImageView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/logo" 
    android:layout_centerHorizontal="true" 
    android:scaleType="fitXY" 
    android:src="@drawable/bar" /> 

    <ImageView 
    android:id="@+id/bottom" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:scaleType="fitXY" 
    android:src="@drawable/bottom" /> 

</RelativeLayout> 

Respuesta

324

Trate de añadir android:fillViewport="true" a su ScrollView

recordar que android:layout_height=”fill_parent” significa esto obviamente no es lo que quiere cuando “establece la altura a la altura de los padres.” usando un ScrollView. Después de todo, el ScrollView sería inútil si su contenido fuera siempre tan alto como sí mismo. Para solucionar esto, debe usar el atributo ScrollView llamado android:fillViewport. Cuando se establece en verdadero, este atributo hace que el elemento secundario de la vista de desplazamiento se expanda a la altura del ScrollView si es necesario. Cuando el niño es más alto que el ScrollView, el atributo no tiene ningún efecto.

http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/

+0

Funciona perfecto. ¿Por qué? – Corbella

+1

Lo mismo ocurre con HorizontalScrollView. – CoolMind

+0

Esto también funciona para NestedScrollView (23.4), ¡gracias! –

1

Sólo añadir androide: fillViewport = "true" en diseño xml yout en ScrollView

<ScrollView android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:background="@color/green" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fitsSystemWindows="true" 
    android:fillViewport="true" 
    > 

<!--define views here--> 


</ScrollView> 
Cuestiones relacionadas