Просмотр внутри ScrollView не занимает все место


144

У меня есть RelativeLayout внутри ScrollView. У моего RelativeLayout есть, android:layout_height="match_parent"но представление не занимает весь размер, это как wrap_content.

Есть ли способ иметь реальное поведение fill_parent / match_parent?

Мой макет:

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

Ответы:


461

Попробуйте добавить android:fillViewport="true"в свой ScrollView

помните, что это android:layout_height=”fill_parent”означает «установить высоту на высоту родителя». Это явно не то, что вы хотите при использовании ScrollView. В конце концов, ScrollViewон стал бы бесполезным, если бы его содержание всегда было таким же высоким, как и он сам. Чтобы обойти это, вам нужно использовать атрибут ScrollView, который называется android:fillViewport. Когда установлено значение true, этот атрибут заставляет дочерний вид представления прокрутки расширяться до высоты, ScrollViewесли это необходимо. Когда дочерний элемент выше, чем ScrollViewатрибут, этот эффект не действует.

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


3
То же самое для HorizontalScrollView.
CoolMind

Спас мой день, скроллвью отстой без этого: р
Касим

Работал как шарм! Спасибо. Ты спас мой день.
Анас Азим

Если это не работает для вас, убедитесь, что вы установили атрибут ScrollView, а не дочерний элемент!
Enselic,

Спасибо за отличный ответ. Спаси и мой день
Дуди

8

Просто добавьте android: fillViewport = "true" в свой XML-макет в 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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.