Не могу скрыть нижний лист, Android

У меня проблемы с моим bottom-sheet потому что, когда я открываю активность, она блокирует представление введите здесь описание изображения

Я думаю, это происходит из-за атрибута XML, объявляющего нижний лист высотой 350 dp:

<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, потому что в следующий раз, когда я попытаюсь открыть нижний лист, нет bottom-sheet, потому что высота равна 0 dp, поэтому он ничего не покажет. Мой вопрос: есть ли способ объявить нижний лист выключен? (Я пытался установить для состояния STATE_COLLAPSED, но это не сработало). Ниже приведен код 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) {

            }
        });

person alb    schedule 22.03.2017    source источник


Ответы (8)


Напишите это:

    mBottomSheetBehavior.setPeekHeight(0);
person ALBPT    schedule 23.03.2017

сначала вы должны добавить атрибут

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"
person Pietro Scarampella    schedule 18.07.2017
comment
нижний лист не отображается, когда я устанавливаю состояние COLLAPSED. У меня есть app:behavior_peekHeight=200dp в XML-коде - person kemdo; 28.09.2017
comment
просто интересно, является ли ваш нижний лист первым дочерним элементом в CoordinatorLayout? - person Pietro Scarampella; 24.10.2017

В моем случае я использовал BottomSheetDialog.

app: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. И высота просмотра не имеет ничего общего с самой высотой макета нижнего листа, которую я установил 200dp (только для примера).

заглянуть

Вы можете просмотреть изменения в своем средстве просмотра XML, если нижний лист развернут, если это так, добавьте app:behavior_peekHeight = 0dpиз макета xml, и он скроется, а также проинформирует вас о текущем состоянии.

person RoCk RoCk    schedule 07.05.2018

В моем случае я не смог скрыть нижний лист, и он был помещен поверх моего представления. Я обнаружил, что animateLayoutChanges = "true" в моем файле макета вызывает эту проблему.

person Marius Kohmann    schedule 10.05.2018
comment
Я удалил animateLayoutChanges = true, и он отлично работает. Спасибо! - person Nithin Raja; 10.07.2018

Внутри onCreate добавьте эти строки, это может скрыть нижнюю панель

mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
mBottomSheetBehavior.setHideable(true); //Important to add
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); //Important to add
person Kishore Reddy    schedule 09.12.2017

При свертывании установите приложение: behavior_hideable="false"

person Vicente Domingos    schedule 20.02.2020

Вам нужно просто добавить приведенный ниже код, и он отлично работает.

Чтобы скрыть нижний лист: -

bottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN

Чтобы показать нижний лист: -

 bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
person Nikhil    schedule 09.06.2021

Вы можете вручную скрыть этот нижний лист, настроив видимость родительского линейного макета, чтобы убрать эту строку в свой код, когда захотите.

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); }

это сработало для меня, пожалуйста, попробуйте

person Dany T Mpofu    schedule 18.04.2019