Почему диалоговое окно нижнего листа не расширяется на планшете?

Я реализовал BottomSheetDialog в своем приложении, но когда я устанавливаю его на планшет и кладу планшет, он не раскрывается полностью при первом щелчке. Сначала он расширяется до состояния Collapsed, и вам нужно перетащить его вверх, чтобы увидеть все. Почему это происходит? Есть ли какие-то настройки, которые вы можете изменить в своем стиле?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
    app:behavior_peekHeight="0dp"
    >
   ...

</LinearLayout>
val view = layoutInflater.inflate(R.layout.home_bottom_sheet_dialog, null)
val bottomSheetDialog = BottomSheetDialog(activity!!)

bottomSheetDialog.setContentView(view)
bottomSheetDialog.show()

Я использую API 22 AndroidX с kotlin.

введите здесь описание изображения введите здесь описание изображения


person OscarCreator    schedule 16.02.2020    source источник
comment
Проверьте это сообщение SO, я думаю, что оно отвечает на ваш вопрос.   -  person ljk    schedule 17.02.2020


Ответы (2)


Как сказал Синан Джейлан, эта часть макета не нужна.

app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" app:behavior_peekHeight="0dp"

Но чтобы решить мою проблему, я присвоил переменной peakHeight BottomSheetBehavior что-то большое, прежде чем она будет показана.

bottomSheetDialog.setContentView(view)
bottomSheetDialog.behavior.peekHeight = 1000
bottomSheetDialog.show()
person OscarCreator    schedule 17.02.2020
comment
в java будет так: bottomSheetDialog.getBehavior().setPeekHeight(1000); - person Rooh Al-mahaba; 29.03.2020
comment
См.: stackoverflow.com/questions/35937453/ - person CodingLumis; 17.07.2020

Реализация полностью расширенного нижнего листа немного сложнее. Вы должны переопределить метод onViewCreated в своем классе BottomSheetDialogFragment и слушать GlobalLayout, как показано ниже:

(код Java)

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    view.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
        BottomSheetDialog dialog = (BottomSheetDialog) getDialog();

        if (dialog != null) {
            FrameLayout bottomSheet = dialog.findViewById(com.google.android.material.R.id.design_bottom_sheet);
            if (bottomSheet != null) {

                BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
                bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
                bottomSheetBehavior.setPeekHeight(0);

                bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
                    @Override
                    public void onStateChanged(@NonNull View view1, int i) {
                        if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_COLLAPSED || bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_HIDDEN) {
                            if (!isStateSaved())
                                dismissAllowingStateLoss();
                        }
                    }

                    @Override
                    public void onSlide(@NonNull View view1, float v) {
                    }
                });
            }
        }
    });
}

Кроме того, нет необходимости в атрибутах в xml:

app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
app:behavior_peekHeight="0dp"
person Sinan Ceylan    schedule 16.02.2020