CollapsingToolbar 不适用于不太高的内容

CollapsingToolbar not working with not-so-tall content

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

<CoordinatorLayout>

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

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

</CoordinatorLayout>

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

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

任何解决方法?

如果你想尝试,就拿 cheesesquare 示例项目并删除(或减少)activity_detail.xml [API17 here]

NestedScrollView 里面的内容

诀窍是将 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 版本中修复。