所以我的布局看起来基本上是这样的:
<ScrollView>
<RelativeLayout>
<BunchOfViews/>
<ImageView android:layout_alignParentBottom="true"/>
</RelativeLayout>
</ScrollView>
我有ScrollView
所以无论屏幕的高度如何,所有布局始终都是可见的。问题是在非常高的屏幕上,我仍然希望我的ImageView
位于底部。但是,ScrollView
的孩子似乎没有明确的底部。 View
位于布局的顶部。如何以一种简洁的方式解决这个问题?
答案 0 :(得分:138)
我遇到了同样的问题。我从来没有找到一个非常令人愉快的解决方案,但这就是我如何做到的。也许其他人有更好的方法,我讨厌添加没有做任何事情的布局。
我的hack是在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>
答案 1 :(得分:68)
我遇到了同样的问题并找到了这个页面:
http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/
基本上,您将ScrollView的android:fillViewport
设置为true,这将允许子视图扩展到与ScrollView本身相同的高度,填充空间。然后,您只需要将其中一个子控件'layout_height
设置为fill_parent
,将layout_weight
设置为1
,从而使该控件“弹出”以填充空白区域。
请注意,如果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>
答案 2 :(得分:20)
似乎不需要线性布局,重要的是fillViewPort。 你可以使用
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottomParent="true">
现在您已指定relativelayout至少为屏幕大小。
答案 3 :(得分:13)
它为我完美的工作android:fillViewport =“true”
答案 4 :(得分:8)
Joel Malone的回答Adding view to bottom of layout inside a scrollview就是这样做的。我的解决方案几乎相同,只是我使用Space
小部件来完成填充父布局中的其余高度的工作。像这样:
<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"
开头的重要属性。他们一起制造了这个技巧。答案 5 :(得分:1)
在你的观点上,你想要在底部使用android:gravity =&#34; bottom&#34;
答案 6 :(得分:1)
只需将此属性 android:fillViewport="true"
放到您的滚动视图中
你会得到你需要的
答案 7 :(得分:0)
这可以帮到你:
<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>
答案 8 :(得分:0)
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 );