将视图添加到滚动视图内的布局底部

所以我的布局看起来基本如下:

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

我有ScrollView所以所有的布局总是可见的,不pipe屏幕的高度。 问题是,在一个非常高的屏幕上,我仍然希望我的ImageView在底部。 但是, ScrollView的孩子似乎没有定义底部。 View放置在布局的顶部。 我怎样才能以一种整洁的方式解决这个问题?

我遇到了同样的问题。 我从来没有find一个令人满意的解决scheme,但这是我如何做到的。 也许别人有更好的办法,我讨厌添加什么都不做的布局。

我的破解是在scrollview的底部添加一个虚拟线性布局,它具有fill_parent来占用所有的空间,并强制滚动视图填满屏幕。 然后添加我想要的那个linearlayout的任何组件。

这是我的布局之一,这样做:

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

我有同样的问题,发现这个网页:

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

基本上,您将ScrollView的android:fillViewport为true,这将允许子视图展开到与ScrollView本身相同的高度,从而填充空间。 然后,您只需要将其中一个子控件的layout_height设置为fill_parentlayout_weight1 ,从而使该控件“popup”以填充空白空间。

请注意,如果ScrollView的内容已经足够高以填充ScrollView,那么android:fillViewport不起作用,所以设置只在需要时才会启动。

我最后的XML看起来像这样:

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

似乎linearlayout是不必要的,重要的是fillViewPort。 你可以使用

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

现在您已经指定了相关布局至less是屏幕的大小。

它对我的工作完全是android:fillViewport =“true”

Joel Malone的回答在scrollview中将视图添加到布局的底部是不对的 。 我的解决scheme几乎是相同的,除了我使用Space部件来完成填充父布局内rest高度的工作。 喜欢这个:

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

注意:

  • 其他答案中的fill_parent被注明为已过时很长时间;
  • 比较一个空的LinearLayout来填充其余的父布局,我认为Space是更合适的(它的目的是做这个工作。)
  • 最后,不要忘记在ScrollView开头的重要属性: android:fillViewport="true" 。 他们一起制造这个伎俩。

在你的观点,你想在底部使用android:gravity =“bottom”

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

这应该可以帮助你:

 <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> 
 ScrollView view = new ScrollView( this ); ScrollView.LayoutParams lps = new FrameLayout.LayoutParams( FILL_PARENT, FILL_PARENT, Gravity.CENTER ); LinearLayout layout = new LinearLayout( this ); // what ever you want in the Layout view.addView( layout, lps );