当设计支持库更新到 24.2.0 后,BottomSheetBehavior 不起作用。

14

BottomSheetBehavior在中文环境下正常工作。

compile 'com.android.support:design:24.1.1'

但是当我将它更新到24.2.0时,它不起作用了。这是一个bug吗? 这是我的代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    >

    <LinearLayout
        android:id="@+id/llScroll"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:orientation="vertical"
        android:background="@color/blue_1"
        app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
    </LinearLayout>

</android.support.design.widget.CoordinatorLayout>

“不工作”并不足够提供信息。它是如何“不工作”的? - ianhanniballake
1
我有同样的问题。"不工作"意味着它只显示为一个简单的布局,没有任何预期的行为。mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 不再起作用了。它就是不工作。 - Zigmārs Dzērve
这里也有同样的问题..现在即使没有设置peekheight,它也会出现。谢谢Google! - Udayaditya Barua
更新到24.2.0后它无法工作。 - kirtan403
我只想指出问题出在 app:layout_behavior="android.support.design.widget.BottomSheetBehavior" 类型的 BottomSheets 上,而不是 BottomSheet 片段。 - Zigmārs Dzērve
2个回答

40

STATE_COLLAPSED:隐藏底部表格的一部分

STATE_HIDDEN:完全隐藏底部表格

在支持库 24.2.0 中,您需要设置 peek height(窥视高度)以指示您希望当底部表格折叠时显示多少像素。

因此,如果您想将其折叠并隐藏,可以在初始化 BottomSheetBehavior 后添加以下代码:

mBottomSheetBehavior.setPeekHeight(0);

这意味着当底部表单折叠时,其高度为0个像素。

或者,如果需要,您可以使用以下代码使其消失:

mBottomSheetBehavior.setHideable(true);
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);

我还没有尝试过这个,但是在bottomsheet的修订历史记录中我没有找到任何东西:https://developer.android.com/topic/libraries/support-library/revisions.html - kirtan403
我发现setPeekHeight(0)是恢复旧功能的最佳和最简单的方法。 - lionscribe

5

2016年8月30日更新

被接受的答案解释了STATE_HIDDENSTATE_COLLAPSED的区别以及如何在com.android.support:design:24.2.0中正确使用它们。

截至2016年8月20日

虽然这似乎是com.android.support:design:24.2.0的一个错误,但你可以暂时通过使用 BottomSheetBehavior.STATE_HIDDEN 来解决它:

mBehavior.setHideable(true);
mBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);

这仍将通过动画关闭底部工作表。

我不确定STATE_COLLAPSEDSTATE_HIDDEN之间的实际区别是什么,而且文档并没有提供足够的帮助,但在它被修复之前,我认为STATE_HIDDEN还可以。


可以用!谢谢! - Zigmārs Dzērve
在我看来,“STATE_COLLAPSED”是在peekheight > 0时触发的。否则,“STATE_COLLAPSED”会被省略,而是触发“STATE_HIDDEN”! - Someone Somewhere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接