Android材质bottomsheet半展开状态具有动态高度

jav*_*oid 5 xml android kotlin bottom-sheet

我用以下 xml 代码创建了一个 BottomSheet:

    <?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/coordinator_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#C57C3C"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tvState"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="initial state" />

    <LinearLayout
        android:id="@+id/linBottomSheet"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">

        <include
            layout="@layout/dialog_bottomsheet_half"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>


</androidx.coordinatorlayout.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

在我的底部工作表用户界面上,我有三个线性布局。命名为linHeader,linOnelinTwo. 在第一种状态下,这个线性布局消失了,除了linHeader

我使用此代码来显示我的底页:

val  behavior = BottomSheetBehavior.from(linBottomSheet)
 behavior.isFitToContents = false
  behavior.setBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
            override fun onStateChanged(bottomSheet: View, newState: Int) {
                when (newState) {

                    BottomSheetBehavior.STATE_COLLAPSED -> {
                        Log.e("bottom", "STATE_COLLAPSED")
                    }

                    BottomSheetBehavior.STATE_HALF_EXPANDED -> {
                        Log.e("bottom", "STATE_HALF_EXPANDED")
                    }

                    BottomSheetBehavior.STATE_EXPANDED -> {
                            Log.e("bottom", "STATE_EXPANDED")
                    }
                    BottomSheetBehavior.STATE_DRAGGING -> {
                        Log.e("bottom", "STATE_DRAGGING")
                    }
                    BottomSheetBehavior.STATE_HIDDEN -> {
                        Log.e("bottom", "STATE_HIDDEN")
                    }
                    BottomSheetBehavior.STATE_SETTLING -> {
                        Log.e("bottom", "STATE_SETTLING")
                    }
                }

            }

            var oldOffSet = 0f
            override fun onSlide(bottomSheet: View, slideOffset: Float) {
                val inRangeExpanding = oldOffSet < slideOffset
                val inRangeCollapsing = oldOffSet > slideOffset
                oldOffSet = slideOffset
            }
        })
Run Code Online (Sandbox Code Playgroud)

为了启用half-expand状态我需要使用这一行:

  behavior.isFitToContents = false
Run Code Online (Sandbox Code Playgroud)

我需要linOne在 BottomSheet 处于半展开状态时使其可见。当我将布局拖动到扩展用户界面时,linTwo此时也可见。但因为使用

 behavior.isFitToContents = false
Run Code Online (Sandbox Code Playgroud)

half-expanded状态下,bottomSheet 高度不适合内容。

我该如何解决这个问题?