Weergave toevoegen aan de onderkant van de lay-out in een schuifweergave

Dus mijn lay-out ziet er ongeveer zo uit:

<ScrollView>
    <RelativeLayout>
        <BunchOfViews/>
        <ImageView android:layout_alignParentBottom="true"/>
    </RelativeLayout>
</ScrollView>

Ik heb de ScrollViewzodat de hele lay-out altijd zichtbaar is, ongeacht de hoogte van het scherm. Het probleem is dat ik op een heel hoog scherm nog steeds wil dat mijn ImageViewonderaan staat. Een kind van een ScrollViewlijkt echter geen gedefinieerde bodem te hebben. De Viewwordt bovenaan de lay-out geplaatst. Hoe kan ik dit probleem op een nette manier oplossen?


Antwoord 1, autoriteit 100%

Ik kwam hetzelfde probleem tegen. Ik heb nooit een erg aangename oplossing kunnen vinden, maar hier is hoe ik het deed. Misschien heeft iemand anders een betere manier, ik haat het om lay-outs toe te voegen die niets doen.

Mijn hack was om een ​​dummy LinearLayouttoe te voegen aan de onderkant van de ScrollViewmet fill_parentom alle ruimte in te nemen en de ScrollViewom het scherm te vullen. Voeg vervolgens welk onderdeel dan ook toe aan die LinearLayout.

Hier is een van mijn lay-outs die dit doet:

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:fillViewport="true" >
    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginTop="15px" >
        <!-- bunch of components here -->
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_below="@+id/spinner"
            android:layout_marginTop="5px"
            android:gravity="center_horizontal|bottom"
            android:paddingTop="2px" >
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="20px"
                android:paddingRight="20px"
                android:text="Delete" />
        </LinearLayout>
    </RelativeLayout>
</ScrollView>

Antwoord 2, autoriteit 47%

Ik had hetzelfde probleem en vond deze pagina:

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

Kortom, u stelt android:fillViewportvan de ScrollView in op true, waardoor de onderliggende weergave kan worden uitgebreid tot dezelfde hoogte als de ScrollView zelf, waardoor de ruimte wordt opgevuld. U hoeft dan alleen een van de layout_heightvan de onderliggende besturingselementen in te stellen op fill_parenten layout_weightop 1, waardoor die controle naar “springen” om de lege ruimte te vullen.

Merk op dat als de inhoud van de ScrollView al lang genoeg is om de ScrollView te vullen, de android:fillViewportgeen effect heeft, dus de instelling wordt alleen geactiveerd wanneer dat nodig is.

Mijn uiteindelijke XML ziet er ongeveer zo uit:

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true">
    <LinearLayout
        android:orientation="vertical"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_height="fill_parent"
            android:layout_weight="1">
            <!-- this expands to fill the empty space if needed -->
        </LinearLayout>
        <!-- this sits at the bottom of the ScrollView,
        getting pushed out of view if the ScrollView's
        content is tall enough -->
        <ImageView
            android:layout_height="wrap_content"
            android:src="@drawable/footer_image">
        </ImageView>
    </LinearLayout>
</ScrollView>

Antwoord 3, autoriteit 12%

het lijkt erop dat de LinearLayoutniet nodig is, het enige dat belangrijk is, is de fillViewPort.
je zou gewoon kunnen gebruiken

   <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottomParent="true">

nu je de relativelayouthebt opgegeven om minimaal de grootte van het scherm te hebben.


Antwoord 4, autoriteit 10%

het werkt perfect voor mij android:fillViewport="true"


Antwoord 5, autoriteit 6%

Het antwoord van Joel Malone Weergave toevoegen aan de onderkant van lay-out in een scrollviewdoet die truc. Mijn oplossing is bijna hetzelfde, behalve dat ik de widget Spacegebruik om de resthoogte in de bovenliggende lay-out te vullen. Zoals dit:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    >
    <LinearLayout
        android:orientation="vertical"
        android:layout_height="wrap_content"
        >
        <android.support.v4.widget.Space
            android:layout_height="match_parent"
            android:layout_weight="1"
            />
    <ImageView
        android:layout_height="wrap_content"
        android:src="@drawable/footer_image"
        />
    </LinearLayout>
</ScrollView>

Let op:

  • fill_parentin de andere antwoorden wordt lange tijd als verouderd beschouwd;
  • Vergelijk met een lege LinearLayoutom de rest van de bovenliggende lay-out te vullen, ik denk dat Spaceveel geschikter is (het is ontworpen om dat werk te doen.)
  • Vergeet tot slot niet dat belangrijke kenmerk aan het begin van ScrollView: android:fillViewport="true". Samen maken ze deze truc.

Antwoord 6, autoriteit 2%

zet dit kenmerk android:fillViewport="true"gewoon in uw ScrolView
en je krijgt wat je nodig hebt


Antwoord 7

Als je denkt dat je onderaan wilt staan, gebruik dan android:gravity="bottom"


Antwoord 8

Van: http://code.google.com/p/k9mail/source/browse/k9mail/trunk/res/layout/account_setup_basics.xml?r=1314

Dit zou je moeten helpen:

<RelativeLayout
        android:layout_marginTop="-45dip" 
        android:padding="0dip"
        android:layout_alignParentBottom="true"
        android:gravity="bottom|right" 
        android:background="@android:drawable/bottom_bar"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent">
        <Button
            android:id="@+id/manual_setup"
            android:text="@string/account_setup_basics_manual_setup_action"
            android:minWidth="@dimen/button_minWidth"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_marginBottom="-4dip" 
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="false" 
            />
        <Button
            android:id="@+id/next"
            android:text="@string/next_action"
            android:minWidth="@dimen/button_minWidth"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:drawableRight="@drawable/button_indicator_next"
            android:layout_marginBottom="-4dip" 
            android:layout_alignParentRight="true"
            android:layout_centerVertical="false" 
            />
    </RelativeLayout>

Other episodes