如何防止在FrameLayouts中滚动,而不是父LinearLayout处理所有滚动?

时间:2015-01-11 21:21:12

标签: android scroll height android-linearlayout android-framelayout

我有一个可滚动的LinearLayout父级,其中嵌入了一些FrameLayouts,如下所示:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:scrollbars="vertical"
android:orientation="vertical">

<FrameLayout
    android:id="@+id/hb_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

<FrameLayout
    android:id="@+id/gn_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

<FrameLayout
    android:id="@+id/yt_container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

</LinearLayout>

我希望FrameLayouts占用他们需要的空间,允许通过LinearLayout滚动整个视图。

问题是:LinearLayout只占用屏幕,它不会滚动,而如果内容溢出屏幕底部,FrameLayout将滚动。

要清楚,我只想让FrameLayouts填充他们需要的任何空间,而LinearLayout可以像一个长视图一样滚动它。我必须修复FrameLayout高度来实现这一目标吗?如果是这样,我的布局是否存在不同屏幕尺寸/密度的风险(或DP在所有情况下都能正常工作?)。

非常感谢你!

编辑:我已经确认在FrameLayout中设置固定高度正是我想要做的事情:滚动为一个。但是,为什么没有wrap_content测量高度然后从那里去?这就是我所期待的情况......我不确定如何判断每个元素的正确高度。

1 个答案:

答案 0 :(得分:-1)

尝试将滚动视图添加到布局

 <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/hb_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <FrameLayout
        android:id="@+id/gn_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <FrameLayout
        android:id="@+id/yt_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    </LinearLayout>
    </ScrollView>