Полноэкранный нижний лист с кнопкой закрытия (X) вверху

Я пытаюсь реализовать нижний лист из библиотеки дизайна Google. При нажатии на кнопку должен открыться нижний лист, который покрывает все окно активности. Например, когда мы открываем электронное письмо в Inbox от Gmail. Но он должен открываться снизу и скользить вниз, чтобы закрыть его.

Щелчок по кнопке должен открывать нижний лист, а при скольжении вниз или вверху слева кнопка «Закрыть» (X) должна закрывать лист.

Я настроил что-то вроде этого:

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

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/bottom_sheet"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/bottom_sheet_behavior">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Hello Bottom Sheet !!" />

    </android.support.v4.widget.NestedScrollView>

    <include layout="@layout/content_my_activity" />

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

И я инициализирую это так:

    mBottomSheet = (NestedScrollView) findViewById(R.id.bottom_sheet);
    mBottomSheetBehavior = BottomSheetBehavior.from(mBottomSheet);
    mButton = (Button) findViewById(R.id.bottom_sheet_button);
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
        }
    });

Однако, когда я нажимаю кнопку, текст просто появляется внизу. Перекрытие существующего содержимого по умолчанию. И никакого черного прозрачного оттенка за нижним листом.

Как я могу сделать это в полноэкранном режиме при нажатии на кнопку?

Причина, по которой я не использую здесь фрагмент, заключается в том, что у меня есть несколько (много) переменных в зависимости от содержимого нижнего листа. Итак, если я показываю нижний лист через фрагмент, мне нужно передавать и получать все данные туда и сюда. Чтобы этого избежать, я хочу, чтобы это было частью деятельности.

Есть ли способ добиться этого? Спасибо за вашу помощь.


person kirtan403    schedule 20.07.2016    source источник
comment
Это ужасная причина не иметь Fragment.   -  person Xaver Kapeller    schedule 20.07.2016
comment
Я знаю это ! :( Есть столько данных, из которых я готовлю содержание нижнего листа.   -  person kirtan403    schedule 20.07.2016
comment
И вы не можете этого сделать в Fragment, почему именно?   -  person Xaver Kapeller    schedule 20.07.2016
comment
Также это: android:layout_height="wrap_content". Высота вашего нижнего листа установлена ​​на wrap_content, а не на match_parent.   -  person Xaver Kapeller    schedule 20.07.2016
comment
Мне нужно настроить слушателей, которые влияют на данные в обоих направлениях, изменяют содержимое нижнего листа и при изменении содержимого нижнего листа необходимо изменить некоторое содержимое содержимого основного действия.   -  person kirtan403    schedule 20.07.2016
comment
match_parent заставляет текст идти за область уведомлений ..   -  person kirtan403    schedule 20.07.2016


Ответы (2)


mButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        mBottomsheet.callOnClick();
    }
});

Попробуйте этот код ........

person Naruto-Uzumaki    schedule 08.08.2016

Когда вы нажимаете кнопку, вы можете рассматривать это действие, как будто ваш контейнер NestedScrollView только что стал видимым, поэтому он будет происходить так, как вы пишете в params

android:layout_width="match_parent"
android:layout_height="wrap_content"

Если вы хотите, чтобы он занимал полную родительскую высоту, просто используйте

android:layout_height="match_parent"

Если говорить о теневом фоне, например, во фрагменте, вы можете обмануть, что вы можете установить альфа-цвет фона для NestedScrollView

android:background="#64000000"

Но это хак, можно использовать фрагмент и просто отправлять ему всю информацию из активности и наоборот.

person Alex Misiulia    schedule 03.03.2017