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.