Dus mijn lay-out ziet er ongeveer zo uit:
<ScrollView>
<RelativeLayout>
<BunchOfViews/>
<ImageView android:layout_alignParentBottom="true"/>
</RelativeLayout>
</ScrollView>
Ik heb de ScrollView
zodat 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 ImageView
onderaan staat. Een kind van een ScrollView
lijkt echter geen gedefinieerde bodem te hebben. De View
wordt 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 LinearLayout
toe te voegen aan de onderkant van de ScrollView
met fill_parent
om alle ruimte in te nemen en de ScrollView
om 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:fillViewport
van 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_height
van de onderliggende besturingselementen in te stellen op fill_parent
en layout_weight
op 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:fillViewport
geen 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 LinearLayout
niet 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 relativelayout
hebt 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 Space
gebruik 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_parent
in de andere antwoorden wordt lange tijd als verouderd beschouwd;- Vergelijk met een lege
LinearLayout
om de rest van de bovenliggende lay-out te vullen, ik denk datSpace
veel 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
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>