La vista all'interno di ScrollView non ha posto


144

Ho un RelativeLayout all'interno di ScrollView. Il mio RelativeLayout ha, android:layout_height="match_parent"ma la vista non occupa l'intera dimensione, è come un wrap_content.

C'è un modo per avere il vero comportamento fill_parent / match_parent?

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

Risposte:


461

Prova ad aggiungere android:fillViewport="true"a ScrollView

ricorda che android:layout_height=”fill_parent”significa "imposta l'altezza all'altezza del genitore". Questo ovviamente non è quello che vuoi quando usi a ScrollView. Dopotutto, ScrollViewdiventerebbe inutile se il suo contenuto fosse sempre alto come se stesso. Per ovviare a questo, è necessario utilizzare l'attributo ScrollView chiamato android:fillViewport. Se impostato su true, questo attributo fa sì che il figlio della vista di scorrimento si espanda all'altezza ScrollViewdell'eventuale. Quando il bambino è più alto di ScrollView, l'attributo non ha alcun effetto.

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


3
Lo stesso vale per HorizontalScrollView.
— CoolMind,

Mi ha salvato la giornata, scrollview fa schifo senza questo: p
— Qasim

Ha funzionato come un fascino! Grazie. Mi hai salvato la giornata.
— Anas Azeem,

Se non funziona per te, assicurati di impostare l'attributo su ScrollView, non sul figlio!
— Enselic,

Grazie per la magnifica risposta. Salva anche il mio giorno
— dudi

8

Aggiungi solo android: fillViewport = "true" nel tuo layout XML in 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.