无法隐藏底部表,Android

时间:2017-03-22 18:20:07

标签: java android bottom-sheet

我的出现问题,因为当我打开活动时,它会阻止视图 enter image description here

我认为这是因为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,所以它赢了什么都没有。 我的问题是,有没有办法宣布关闭? (我尝试将stateState设置为STATE_COLLAPSED但不起作用)。 Bellow是与底部工作表交互的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 个答案:

答案 0 :(得分:9)

写下这个:

    mBottomSheetBehavior.setPeekHeight(0);

答案 1 :(得分:6)

首先你必须添加属性

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"

答案 2 :(得分:1)

在我的情况下,我无法隐藏底片,它被置于我的视线之上。我发现布局文件中的animateLayoutChanges = "true"导致了这个问题。

答案 3 :(得分:0)

onCreate内添加这些行,它可以隐藏底栏

mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
mBottomSheetBehavior.setHideable(true); //Important to add
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); //Important to add

答案 4 :(得分:0)

就我而言,我使用的是batch_size = 1 epochs = 25 model = Sequential() model.add(Conv1D(32, input_shape=(1040,1), kernel_size=100,padding='same',name='ConvLayer1', strides=1)) model.add(LeakyReLU(alpha=0.1)) model.add(MaxPooling1D(pool_size=70, strides=1, padding='same',name='PoolingLayer1')) #model.add(Dropout(0.10)) model.add(Conv1D(64, kernel_size=70,padding='same',name='ConvLayer2',strides=1)) model.add(LeakyReLU(alpha=0.1)) model.add(MaxPooling1D(pool_size=40, strides=1, padding='same',name='PoolingLayer2')) #model.add(Dropout(0.10)) model.add(Conv1D(128, kernel_size=40,padding='same',name='ConvLayer3',strides=1)) model.add(LeakyReLU(alpha=0.1)) model.add(MaxPooling1D(pool_size=10, strides=1, padding='same',name='PoolingLayer3')) #model.add(Dropout(0.10)) model.add(Flatten()) model.add(Dense(1,name='output', activation='linear')) w = model.get_weights() model.compile(loss='mse', optimizer=keras.optimizers.Adam(lr=0.001),metrics=['mse'])

BottomSheetDialog - 属性用于确定,如果我们的底页将在向下滑动时隐藏。换句话说,如果未设置峰值高度,则底部页面顶部不在屏幕上。

app:behavior_hideable - 用于表示底部工作表可见数量的属性值。

app:behavior_peekHeight

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

peek

如果扩展了底部工作表,您可以在XML查看器中查看更改,如果是,则从xml布局添加<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> ,它将隐藏并通知您当前状态。

答案 5 :(得分:0)

收起时将app:behavior_hideable =“ false”设置为

答案 6 :(得分:0)

您只需添加以下代码即可完美运行。

要隐藏底页:-

bottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN

显示底页:-

 bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED

答案 7 :(得分:-1)

您可以通过将父线性布局的可见性设置为“ gone”来手动隐藏该底部工作表 将此行放在您的代码中

if (confirmLayoutBehaviour.getState() != BottomSheetBehavior.STATE_EXPANDED) { //todo hide your bottom sheet if its already open confirmLayout.setVisibility(View.GONE); } else { //set it to visible if its not open confirmLayout.setVisibility(View.VISIBLE); }

对我有用,请尝试