LinearLayout在ScrollView中未扩展


371

我有一个LinearLayout里面ScrollViewandroid: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因为在Eclipse中Android Layout Editor,如果选择ScrollView(在“概述”面板中),它将以红色边框突出显示,该红色边框将屏幕填充到底部,但是当我选择LinearLayout其突出显示时不会扩展到屏幕底部。我该怎么做呢?

我试图实现的效果是在其下方有一些文本和一个按钮(在LinearLayout4级内部只有一个按钮)。文本可能足够大,需要滚动条,在这种情况下,我希望用户必须向下滚动才能看到按钮。如果文本不足以容纳滚动条,我希望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>

此刻我求助于android:layout_gravity="bottom"有问题的LinearLayout,无论如何,它都会使按钮粘在屏幕底部。但这也使文本停留在屏幕底部,这与我所追求的不完全相同。

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

Answers:


956

最后自己找到了解决方案。问题是不符合LinearLayout,但与ScrollView(似乎不可思议,考虑的事实ScrollView 扩大,而LinearLayout不是)。

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


4
请注意,LinearLayout会垂直扩展,但这不一定会反映在您的布局中,除非它包含使用占用了额外空间的控件android:weight
Paul Lammertsma

这确实有帮助。感谢那。但是没有此代码有时效果很好。你知道为什么吗?
Ashokchakravarthi Nagarajan 2014年

<LinearLayout不适用于android:layout_width =“ fill_parent” android:layout_height =“ wrap_content” android:fillViewport =“ true” android:background =“#000” android:orientation =“ vertical”> </ LinearLayout>
Prasad

3
好恶心,我坐了好几个小时,一直在寻找我的代码有什么问题。为了这个参数?您何时想将其设置为false?
MyWay 2015年

@Prasad使您的线性布局高度与父
对象

22

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


8

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

您可能需要设置

android:layout_weight="1"

对于您想要扩展的项目


1
谢谢您的回答。我尝试了您的建议,但没有成功。我还更新了我的问题,以包括布局xml。
Felix

3

解决方法是使用

android:fillViewport="true"

滚动视图上,此外尝试使用

"wrap_content"而不是"fill_parent""fill_parent"

现在已弃用。


2

我已经动态地习惯了这个。我有一个LinearLayout,并在其中使用ScrollView作为子级。然后,我再次使用LinearLayout并将所需的View添加到此LinearLayout中,然后将此LinearLayout添加到ScrollView中,最后将此ScrollView添加到LinearLayout中。然后,您可以在urView中滚动,而看不到任何内容。

LinearLayout(父类)-ScrollView(LinerLayout的子级)-LinearLayout(ScrollView的子级)-在此处添加您想要的textView,Buttons,微调框等。然后将此LinearLyout添加到ScrollView。Bcoz仅适用于ScrollView的一个CHILD,最后将此滚动视图添加到LinearLyout。如果屏幕大小超出了定义的区域,则您将在ScrollView中获得一个Scroll。


但是此解决方案使xml变得更加复杂,并且需要花费更多的时间进行充气。
twlkyao 2015年

1

就我而言,我没有给

LinearLayout的方向(ScrollView的子级)

因此,默认情况下,它需要水平放置,但scrollview会垂直倾斜,因此请检查是否将android:orientation =“ vertical”'设置为ScrollView的Child(对于LinearLayout)。

这是我的情况,希望对某人有帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.