在scrollview中向布局底部添加视图

时间:2010-03-10 13:36:10

标签: android layout scroll

所以我的布局看起来基本上是这样的:

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

我有ScrollView所以无论屏幕的高度如何,所有布局始终都是可见的。问题是在非常高的屏幕上,我仍然希望我的ImageView位于底部。但是,ScrollView的孩子似乎没有明确的底部。 View位于布局的顶部。如何以一种简洁的方式解决这个问题?

9 个答案:

答案 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更合适(它旨在完成这项工作。)
  • 最后,不要忘记ScrollViewandroid:fillViewport="true"开头的重要属性。他们一起制造了这个技巧。

答案 5 :(得分:1)

在你的观点上,你想要在底部使用android:gravity =&#34; bottom&#34;

答案 6 :(得分:1)

只需将此属性 android:fillViewport="true" 放到您的滚动视图中 你会得到你需要的

答案 7 :(得分:0)

来自: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>

答案 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 );