A visualização dentro do ScrollView não ocupa todo o lugar


144

Eu tenho um RelativeLayout dentro de um ScrollView. Meu RelativeLayout possui, android:layout_height="match_parent"mas a visualização não ocupa todo o tamanho, é como um wrap_content.

Existe uma maneira de ter o comportamento real fill_parent / match_parent?

Meu layout:

<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>

Respostas:


461

Tente adicionar android:fillViewport="true"ao seu ScrollView

lembre-se de que android:layout_height=”fill_parent”significa "defina a altura para a altura dos pais". Obviamente, isso não é o que você deseja ao usar a ScrollView. Afinal, o ScrollViewconteúdo se tornaria inútil se seu conteúdo fosse sempre tão alto quanto ele. Para contornar isso, você precisa usar o atributo ScrollView chamado android:fillViewport. Quando definido como true, esse atributo faz com que o filho da exibição de rolagem se expanda até a altura do, ScrollViewse necessário. Quando a criança é mais alta que a ScrollView, o atributo não tem efeito.

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


3
O mesmo é para HorizontalScrollView.
CoolMind

Salvou meu dia, scrollview suga sem esta: p
Qasim

Trabalhou como um encanto! Obrigado. Você salvou o meu dia.
Anas Azeem

Se isso não funcionar, certifique-se de definir o atributo no ScrollView, não no filho!
Enselic 11/09/19

Obrigado pela ótima resposta. Save my day also
dudi 17/04

8

Basta adicionar android: fillViewport = "true" no layout xml do yout no 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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.