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>

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/


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>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.