La vue à l'intérieur de ScrollView n'a pas tout lieu

144

J'ai un RelativeLayout dans un ScrollView. Mon RelativeLayout a android:layout_height="match_parent"mais la vue ne prend pas toute la taille, c'est comme un wrap_content.

Existe-t-il un moyen d'avoir le vrai comportement fill_parent / match_parent?

Ma mise en page:

<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>
g123k
la source

Réponses:

461

Essayez d'ajouter android:fillViewport="true"à votre ScrollView

rappelez-vous que cela android:layout_height=”fill_parent”signifie «régler la hauteur à la hauteur du parent». Ce n'est évidemment pas ce que vous voulez lorsque vous utilisez un fichier ScrollView. Après tout, le ScrollViewdeviendrait inutile si son contenu était toujours aussi grand que lui-même. Pour contourner ce problème, vous devez utiliser l'attribut ScrollView appelé android:fillViewport. Lorsqu'il est défini sur true, cet attribut entraîne l'expansion de l'enfant de la vue de défilement jusqu'à la hauteur de la ScrollView. Lorsque l'enfant est plus grand que le ScrollView, l'attribut n'a aucun effet.

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

Sam Dozor
la source
3
Il en va de même pour HorizontalScrollView.
CoolMind
Sauvé ma journée, scrollview est nul sans ça: p
Qasim
A travaillé comme un charme! Merci. Tu as sauvé ma journée.
Anas Azeem
Si cela ne fonctionne pas pour vous, assurez-vous de définir l'attribut sur ScrollView, pas l'enfant!
Enselic le
Merci pour la bonne réponse. Sauve ma journée aussi
dudi
8

Ajoutez simplement android: fillViewport = "true" dans votre mise en page XML dans 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>
virendra singh deora
la source