隐藏在状态栏后面的ScrollView顶部

时间:2018-01-05 19:38:00

标签: android android-layout statusbar android-scrollview

我有一个FrameLayout,其背景为ImageViewLinearLayout中包含ScrollView,以显示我需要的所有视图。简化代码显示在下方,用于我的Fragment

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"     
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/ink"
        android:scaleType="center"/>

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

        <LinearLayout
            android:id="@+id/linear_layout_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:orientation="vertical">
        </LinearLayout>

   </ScrollView>
</FrameLayout>

此片段放在FrameLayout的{​​{1}}内,看起来像这样

activity_main.xml

当项目高度的总和大于屏幕<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" > </FrameLayout> 的高度时,我可以滚动ScrollView内的所有项目,如预期的那样。

问题在于,当我滚动到LinearLayout的顶部时,最上面的视图隐藏在状态栏后面,如下图所示:

我正在寻找的行为是:

The top of the view is below the status bar and fully visible.

如何完成第二张图片中显示的结果?

我的styles.xml如下

LinearLayout

1 个答案:

答案 0 :(得分:3)

以下是遵循的规则:

  • 不要对android:layout_gravity的孩子使用ScrollView属性。
    • 它会产生不需要的行为,请参阅注释以了解详细信息。
  • 不要对android:layout_height="match_parent"的孩子使用ScrollView
    • 孩子不想像屏幕一样大(滚动视图视口)。重点是孩子有一个精确的高度或想要扩展以适应自己的内容。
    • 虽然match_parent对于滚动视图的子项可能表现为wrap_content,但哲学上它在这里没有任何意义。

如果您需要将内容集中在整个屏幕上允许在不适合时滚动,请使用此设置:

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="vertical">
        <!-- Etc. -->
    </LinearLayout>
</ScrollView>
如果子项小于滚动视图,

android:fillViewport="true"会扩展子项。

请注意layout_中缺少的android:gravity前缀。

  • android:gravity告诉LinearLayout如何将自己的孩子置于其中。
  • android:layout_gravity告诉父母的任何人(此处为ScrollView)如何将LinearLayout定位在父母之内。