25

我很确定这是一个错误,所以我要求解决方法。我的布局是这样的:

<CoordinatorLayout>

    <AppBarLayout>
        <CollapsingToolbarLayout>
            <ImageView/>
            <Toolbar/>
        </CollapsingToolbarLayout>
    </AppBarLayout>

    <android.support.v4.widget.NestedScrollView/> <!-- content here -->

</CoordinatorLayout>

我正在从网络上检索内容,但我不知道它会有多高——可能只有几行,也可能很长。但是,我发现CollapsingToolbar当内容不足以覆盖整个屏幕时效果不佳。案例:

  • content.height > screen.height: 工作; 滑动顶部/底部可展开和折叠工具栏,以及滚动内容;

  • content.height < screen.height: 没有。这不好,因为大多数时候(content.height + expandedToolbar.height) > screen.height

换句话说,当内容不够高时,即使 content+expandedToolbar 比整个屏幕高很多,它也不会对滚动手势做出反应并显示一些错误 - 可能需要十个手势才能将工具栏折叠一点。所以你几乎无法到达内容的底部,因为工具栏被展开,它隐藏在底部。

任何解决方法?

如果您想尝试,只需使用cheesesquare示例项目并删除(或减少)NestedScrollViewactivity_detail.xml 中的内容 [API17 here]

4

1 回答 1

26

诀窍是添加android:layout_gravity="fill_vertical"NestedScrollView. 这样,工具栏可以平滑地折叠和扩展,并对任何非空的滚动手势做出反应NestedScrollView,无论其大小。

当然,如果滚动视图为空,则工具栏不会通过滚动屏幕的“内容”部分来折叠。但这对我来说似乎并没有那么糟糕。

更新

看起来此解决方案在内容较大时存在一些问题,因为内容的最底部将保持隐藏状态。我可以发现隐藏部分(似乎)与折叠的工具栏高度一样大。这使得定义解决方法变得容易 - 只需在 ScrollView 的底部添加一个边距,以便对其进行测量并释放底部隐藏的部分。因此:

android:layout_gravity="fill_vertical"
android:layout_marginBottom="?attr/actionBarSize"

Toolbar或您在视图中赋予的任何大小。请注意,此解决方案非常适合大小内容,但较小的内容滚动不太流畅。

更新 2(2015 年 7 月)

从早期的测试来看,这个错误似乎已经在支持设计库的 v22.2.1 版本中得到修复。

于 2015-06-12T16:15:41.117 回答