CollapsingToolbar无法使用不那么高的内容

nat*_*rio 22 android android-support-library android-design-library androiddesignsupport

我很确定这是一个bug,所以我要求解决方法.我的布局如下:

<CoordinatorLayout>

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

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

</CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

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

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

  • content.height < screen.height:没有.这是不是好,因为大部分的时间(content.height + expandedToolbar.height) > screen.height!

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

任何解决方法?

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

nat*_*rio 22

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

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

更新

看起来这个解决方案存在一些内容较大的问题,因为内容的最底部将保持隐藏状态.我可以发现隐藏的部分(看起来像)与折叠的工具栏高度一样大.这样可以很容易地定义一个变通方法 - 只需在ScrollView的底部添加一个边距,以便测量它并释放底部隐藏的部分.从而:

android:layout_gravity="fill_vertical"
android:layout_marginBottom="?attr/actionBarSize"
Run Code Online (Sandbox Code Playgroud)

或者你Toolbar在视图中给出的任何尺寸.请注意,此解决方案适合小型和大型内容,但滚动不是那么平滑,较小的.

Update2(2015年7月)

从早期测试开始,看起来该错误已在支持设计库的v22.2.1版本中得到修复.

  • 我已经使用过v23.0.1.但是我的NestedScrollView内部的底部部分仍然是隐藏的,它位于CollapsingToolbarLayout内部.正如你所说,它的大小与工具栏的大小相同.可能有什么不对?我应该开一个新问题吗? (2认同)