11

我是 android 开发的新手,我有以下问题。我需要使用FrameLayoutinside ofScrollView使其可滚动。我写了这个

    <ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true" 
    android:background="#00ff00">

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="500dp"
        android:background="#ff0000">
    </FrameLayout>
   </ScrollView>

但这不起作用。我试过了RelativeLayout,它有效,但我需要使用 for FrameLayout。有任何想法吗?

4

5 回答 5

23

android:fillViewport="true"解决了这个问题。

android:fillViewport, 定义滚动视图是否应该拉伸其内容以填充视口。

    <ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </FrameLayout>
   </ScrollView>
于 2016-03-18T09:53:39.733 回答
5

我尝试了许多变体来解决这个问题,包括这里的答案,但没有一个有用。ScrollView总是换行FrameLayout,但一切正常RelativeLayoutLinearLayout...

我为此找到了一种解决方案 - 将最小高度设置为FrameLayout. 您可以通过setMinimumHeight()方法动态设置最小高度。

于 2013-03-23T13:05:41.017 回答
3

要在 ScrollView 中获取 FrameLayout,请执行以下操作:

<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/linearLayoutHeader1"
    android:layout_centerHorizontal="true" >

    <LinearLayout
        android:id="@+id/LinearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
        <FrameLayout
            android:id="@+id/FrameLayout1"
            android:layout_width="match_parent"
            android:layout_height="1440dp"
             >
        </FrameLayout>

    </LinearLayout>
</ScrollView>
于 2014-08-26T05:03:34.433 回答
2

您的 xml 示例非常好,我唯一能看到的是:如果 ScrollLayout 父级大于 500dp,它将不会滚动。

实际上,仅当内容大于滚动视图时才使用滚动。

在这里,您将内容高度设置为 500dip,如果此 scrollView 的父级在 800dip 高度屏幕上占据整个屏幕,则将滚动视图设置为“match_parent”(例如)

=> 根本不需要滚动。

于 2013-03-01T17:40:53.127 回答
2

尝试在 FrameLayout 中将 layout_height 设置为“wrap_content”

<FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ff0000">

当 FrameLayout 高于屏幕边框时,它将滚动。或者,如果您想要可滚动区域的固定高度,请在 ScrollView 上将高度设置为 500dp。这取决于您想要什么,但永远不要在 ScrollView 子项上设置固定高度。ScrollView 子项的高度应始终为 wrap_content。

<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="500dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true" 
    android:background="#00ff00">

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ff0000">
    </FrameLayout>
</ScrollView>
于 2013-03-01T17:53:52.860 回答