无法隐藏底部抽屉,Android

9
我有一个关于的问题,因为当我打开该活动时,它会挡住视图。我认为这是由于XML属性声明了的高度为350dp所致。 在此输入图片描述
<android.support.v4.widget.NestedScrollView
    android:id="@+id/bottom_sheet"
    android:layout_width="match_parent"
    android:layout_height="350dp"
    android:background="?android:attr/windowBackground"
    android:clipToPadding="true"
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior">

事实上,我无法将该值更改为0dp,因为下一次尝试打开时,由于高度为0dp,所以不会显示任何内容,导致不存在。我的问题是,是否有一种方法可以声明关闭?(我已经尝试将setState设置为STATE_COLLAPSED,但没有效果)。以下是与底部菜单交互的Java代码:JAVA:
View bottomSheet = findViewById( R.id.bottom_sheet );
        mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
        mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
        mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
            @Override
            public void onStateChanged(View bottomSheet, int newState) {
                if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
                    //mBottomSheetBehavior.setPeekHeight(0);
                    //mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
                    //mBottomSheetBehavior.isHideable();
                }
            }

            @Override
            public void onSlide(View bottomSheet, float slideOffset) {

            }
        });
8个回答

21

首先您需要添加这个属性。

app:behavior_hideable="true"

在您的...
<android.support.v4.widget.NestedScrollView
    android:id="@+id/bottom_sheet"
    android:layout_width="match_parent"
    android:layout_height="350dp"
    android:background="?android:attr/windowBackground"
    android:clipToPadding="true"
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior">

然后您可以使用以下方法隐藏底部表单:

mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN)

而不是

mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED)

状态COLLAPSED处于HIDDEN和EXPANDED之间,它的高度必须由属性指定:

app:behavior_peekHeight="200dp"

当我设置状态为COLLAPSED时,底部表单不显示。我在XML代码中有app:behavior_peekHeight="200dp"。 - kemdo
{btsdaf} - Pietro Scarampella
你好,实际上我有一个不同的问题。如果我从底部菜单中的按钮点击进入一个片段,该片段会打开,但底部菜单不会自动隐藏在其他片段中,我必须手动点击屏幕才能隐藏它。这是我的问题:https://dev59.com/_GkMtIcB2Jgan1znTz0j 有人可以帮助我吗? - Vasant Raval

12

请将此写下:

    mBottomSheetBehavior.setPeekHeight(0);

你好,实际上我有一个不同的问题。如果我从底部菜单中的按钮点击进入一个片段,该片段会打开,但底部菜单不会自动隐藏在其他片段中,我必须手动点击屏幕才能隐藏它。这是我的问题:https://dev59.com/_GkMtIcB2Jgan1znTz0j 有人可以帮助我吗? - Vasant Raval

3
在我的情况下,我无法隐藏底部工作表,并且它被放置在我的视图之上。我发现我的布局文件中的animateLayoutChanges =“true”导致了这个问题。

我已经移除了 animateLayoutChanges = "true",现在它完美地工作了。谢谢! - Nithin Raja
你好,实际上我有一个不同的问题。如果我从底部菜单中的按钮点击进入一个片段,该片段会打开,但底部菜单不会自动隐藏在其他片段中,我必须手动点击屏幕才能隐藏它。这是我的问题:https://dev59.com/_GkMtIcB2Jgan1znTz0j 有人可以帮助我吗? - Vasant Raval
你节省了我的时间。谢谢。 - Rasel

2
在我的情况下,我正在使用BottomSheetDialogapp:behavior_hideable属性用于确定我们的底部表是否会在向下滑动时隐藏。换句话说,如果未设置峰值高度,则底部表顶部将离开屏幕。 app:behavior_peekHeight属性值用于表示底部表将可见的像素数量。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottom_sheet_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="10dp"
android:orientation="vertical"
android:background="@color/colorPrimaryDerived"
app:layout_behavior="@string/bottom_sheet_behavior"
app:behavior_hideable="true"
app:behavior_peekHeight="0dp"> ........... </LinearLayout>

我将peekHeight设置为50dp。而peek height与我设置的bottomSheet布局高度本身无关,我将其设置为200dp(仅作为示例)。

peek

如果底部表单展开,您可以在XML查看器中查看更改。 如果是这样,请从xml布局中添加app:behavior_peekHeight = 0dp,它将隐藏并通知您当前状态。

你好,实际上我有一个不同的问题,如果我从一个在底部工作表中的按钮单击转到一个片段,该片段会打开,但底部工作表不会自动隐藏。在另一个片段中,我必须通过点击屏幕来手动完成。这是我的问题:https://dev59.com/_GkMtIcB2Jgan1znTz0j,有人可以帮帮我吗? - Vasant Raval

1
onCreate 中添加以下代码,可以隐藏底部栏。
mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
mBottomSheetBehavior.setHideable(true); //Important to add
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); //Important to add

0

您只需要简单地添加以下代码,它就可以完美地工作。

隐藏底部表单:

bottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN

显示底部菜单:-
 bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED

0

当折叠时,设置app:behavior_hideable="false"


-1

您可以通过将父线性布局的可见性设置为gone来手动隐藏底部表单,当您想要隐藏它时,请将此行代码放入您的代码中。

首先检查它是否正在显示,否则隐藏它。

if (confirmLayoutBehaviour.getState() != BottomSheetBehavior.STATE_EXPANDED) { // 如果已经打开,请隐藏您的底部表单 confirmLayout.setVisibility(View.GONE); } else { // 如果未打开,请将其设置为可见 confirmLayout.setVisibility(View.VISIBLE); }

这对我有用,请尝试一下


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