2

我在我的应用程序中实现了一个 BottomSheetDialog,但是当我将它安装在平板电脑上并让平板电脑放下时,它不会在第一次点击时完全展开。它首先展开为折叠状态,您必须将其向上拖动才能查看所有内容。为什么这样做?你可以改变你的风格吗?

<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 一起使用。

在此处输入图像描述 在此处输入图像描述

4

2 回答 2

5

正如 Sinan Ceylan 所说,这部分布局是不需要的。

应用程序:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" 应用程序:behavior_peekHeight="0dp"

但是为了解决我的问题,我在显示之前将 BottomSheetBehavior 的peakHeight变量设置为较大的值。

bottomSheetDialog.setContentView(view)
bottomSheetDialog.behavior.peekHeight = 1000
bottomSheetDialog.show()
于 2020-02-17T17:38:30.407 回答
0

实现完全展开的底部工作表有点棘手。您应该覆盖您的 BottomSheetDialogFragment 类中的 onViewCreated 方法并按如下方式监听 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"
于 2020-02-16T21:10:40.423 回答