LinearLayout不在ScrollView内部扩展

我在ScrollView中有一个LinearLayout ,它具有android:layout_height="fill_parent" ,但它不会扩展到ScrollView的全部高度。 我的布局看起来像这样:

level    layout    layout_width    layout_height
1    LinearLayout    fill_parent    fill_parent
2    LinearLayout    fill_parent    wrap_content
3    (some irrelevant stuff)
2    ScrollView      fill_parent    fill_parent <-- this expands full height
3    LinearLayout    fill_parent    fill_parent <-- this does not (has orientation=vertical)
(following stuff probably are irrelevant, but just to be sure:)
4    TextView        fill_parent    fill_parent
4    LinearLayout    fill_parent    wrap_content

我可以看到LinearLayout不会扩展ScrollView的整个高度,因为在Android Layout Editor Eclipse中,如果我选择ScrollView (在“大纲”面板中),它会用红色边框突出显示,并将屏幕填充到底部,但当我选择LinearLayout其突出显示不会展开到屏幕的底部。 我怎样才能做到这一点?

我试图实现的效果是在它下面有一些文本和一个按钮(在4级的LinearLayout中只有一个按钮)。 文本可能足够大,需要滚动条,在这种情况下,我希望用户必须向下滚动才能看到按钮。 如果文本对于滚动条不够大,我希望包含按钮的LinearLayout粘贴到屏幕的底部。

起初,我认为我不应该发布完整的XML,因为在问题中看到大量代码通常是一种倒退。 但是,它似乎可能是必要的,所以这是完整的布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:id="@+id/video_layout"
        android:focusable="true"
        style="@style/VideoLayout">
        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:foreground="@android:drawable/ic_media_play"
            android:foregroundGravity="center">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/video_thumb"
                android:padding="5dip"
                android:background="#454545"/>
        </FrameLayout>
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:focusable="true"
            style="@style/VideoTitle"
            android:id="@+id/video_title"
            android:layout_gravity="center"
            android:layout_weight="1"/>
    </LinearLayout>
    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1">
        <!-- this ScrollView expands the full height of the screen.
             However, the next LinearLayout does not expand the full height of the ScrollView -->
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:layout_gravity="fill"
            android:orientation="vertical"
            android:id="@+id/info_layout">
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/info_body"
                style="@style/InfoText"/>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                style="@android:style/ButtonBar">
                    <Button
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:layout_weight="1"
                        android:text="@string/button_readmore"
                        android:id="@+id/btn_read_more"/>
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

目前,我对有问题的LinearLayout使用了android:layout_gravity="bottom" ,这使得按钮无论如何都会粘在屏幕的底部。 但是,这也使得文本粘在屏幕的底部,这不正是我之前的想法。

更新:从头开始, android:layout_gravity="bottom"使得ScrollView无法滚动。 其他想法?


最后自己找到解决方案。 问题不在于LinearLayout ,而在于ScrollView (看起来很奇怪,考虑到ScrollView 正在扩展,而LinearLayout则没有)。

解决方案是在ScrollView上使用android:fillViewport="true"


我知道这篇文章是非常古老的,对于那些不想使用android:fillViewport="true"因为它有时不会显示键盘上方的edittext。 使用相对布局而不是LinearLayout可以解决这个问题。


你能提供你的布局xml吗? 这样做可以让人们以最小的努力重现问题。

您可能需要设置

android:layout_weight="1"

为您想要扩展的项目

链接地址: http://www.djcxy.com/p/63693.html

上一篇: LinearLayout not expanding inside a ScrollView

下一篇: Android: ScrollView not scrolling with keyboard out