Widok wewnątrz ScrollView nie zajmuje całego miejsca

144

Mam RelativeLayout wewnątrz ScrollView. Mój RelativeLayout ma, android:layout_height="match_parent"ale widok nie zajmuje całego rozmiaru, to jest jak wrap_content.

Czy istnieje sposób, aby uzyskać prawdziwe zachowanie fill_parent / match_parent?

Mój układ:

<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
źródło

Odpowiedzi:

461

Spróbuj dodać android:fillViewport="true"do ScrollView

pamiętaj, że android:layout_height=”fill_parent”oznacza to „ustaw wysokość na wysokość rodzica”. To oczywiście nie jest to, czego chcesz, używając pliku ScrollView. W końcu ScrollViewstałby się bezużyteczny, gdyby jego zawartość była zawsze tak wysoka jak on sam. Aby obejść ten problem, musisz użyć atrybutu ScrollView o nazwie android:fillViewport. Po ustawieniu wartości true ten atrybut powoduje, że element podrzędny widoku przewijania rozszerza się do wysokości, ScrollViewjeśli jest to konieczne. Gdy dziecko jest wyższe niż dziecko ScrollView, atrybut nie ma znaczenia.

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

Sam Dozor
źródło
3
To samo dotyczy HorizontalScrollView.
CoolMind
Uratowałem mój dzień, scrollview jest do niczego bez tego: p
Qasim
Działał jak urok! Dzięki. Uratowałeś mi dzień.
Anas Azeem
Jeśli to nie zadziała, upewnij się, że ustawiłeś atrybut w ScrollView, a nie element podrzędny!
Enselic,
Dzięki za świetną odpowiedź. Save my day also
dudi
8

Po prostu dodaj android: fillViewport = "true" w układzie yout xml w 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
źródło