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>

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/


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>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.