ค่าของอัตราส่วนที่ขยายครึ่งจะต้องถูกตั้งค่าเป็นค่าระหว่าง 0 และ 1 เอกสิทธิ์ดังนั้นให้ตั้งค่านี้เป็นจำนวนที่ต่ำมากซึ่งแน่นอนว่าจะน้อยกว่าความสูงที่แอบมองของคุณพูดว่า "0.0001f" ด้วยค่านี้คุณไม่ควรเห็นแม้แต่STATE_HALF_EXPANDEDสถานะ รัฐจะมีความผันผวนระหว่างและSTATE_EXPANDEDSTATE_COLLAPSED
ทางเลือกอื่น
วิธีการแก้ปัญหาข้างต้นใช้งานได้และปิดการใช้งานอย่างมีประสิทธิภาพของSTATE_HALF_EXPANDEDรัฐ แต่เป็นการแฮ็ก (IMO) และอาจแตกในอนาคต ตัวอย่างเช่นจะเกิดอะไรขึ้นหากค่าที่เหมาะสมสำหรับอัตราส่วนที่ขยายครึ่งซึ่งอยู่ระหว่างความสูงที่แอบดูและความสูงเต็มจะถูกบังคับใช้ นั่นจะเป็นปัญหา
ข้อกำหนดตามที่ระบุไว้โดย OP คือแผ่นด้านล่างควรเปลี่ยนระหว่างความสูงแอบมองและความสูงเต็ม ไม่มีปัญหากับความสูงแอบมอง แต่ OP ระบุisFitToContents = falseเพื่อให้ได้ความสูงเต็ม (ฉันสมมติว่าแผ่นด้านล่างของเขาอาจจะสั้นกว่าพื้นที่ว่าง)
น่าเสียดายที่เมื่อisFitToContents == falseมีการแนะนำพฤติกรรม "ครึ่งความสูง" เพิ่มเติมว่า OP ต้องการหลีกเลี่ยงและดังนั้นจึงเป็นคำถาม
นอกจากพฤติกรรม "half-height" แล้วยังมีการแนะนำพฤติกรรมอื่นซึ่งก็คือ "offset offset" ออฟเซ็ตที่ขยายจะระบุระยะที่แผ่นด้านล่างสุดเต็มจอจะหยุดลง 100fยกตัวอย่างเช่นค่าของจะออกจาก100pxชายแดนที่ด้านบนของแผ่นด้านล่างเมื่อขยายเต็ม ค่าเริ่มต้นสำหรับออฟเซ็ตที่ขยายเพิ่มเป็นศูนย์
ฉันไม่ได้ตระหนักถึงพฤติกรรมใด ๆ ที่isFitToContents == falseแนะนำนอกเหนือจากที่กล่าวไว้ข้างต้น
ดังนั้นตามข้อกำหนดเหล่านี้เราสามารถทำแผ่นด้านล่างที่เคลื่อนไหวระหว่างความสูงที่มองและความสูงเต็มในขณะที่การระบุisFitToContents == trueจึงหลีกเลี่ยงปัญหา "ความสูงครึ่ง" ไม่มีข้อกำหนดสำหรับออฟเซ็ตที่ไม่ขยายศูนย์ดังนั้นเราจึงไม่ต้องกังวลกับสิ่งนั้น
นี่คือแอพสาธิตสั้น ๆ ที่แสดงให้เห็นว่าเราสามารถตอบสนองความต้องการเหล่านี้ได้ด้วยโครงสร้างแผ่นด้านล่างขวา:

MainActivity5.kt
class MainActivity5 : BaseActivity() {  
    override fun onCreate(savedInstanceState: Bundle?) {  
        super.onCreate(savedInstanceState)  
        setContentView(R.layout.activity_main5)  
        val bottomSheet = findViewById<LinearLayout>(R.id.bottom_sheet)  
        val sheetBehavior: BottomSheetBehavior<LinearLayout> = BottomSheetBehavior.from(bottomSheet)  
        sheetBehavior.isFitToContents = true // the default  
  sheetBehavior.peekHeight = 200  
  // Log the states the bottom sheet passes through.  
  sheetBehavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {  
            override fun onStateChanged(bottomSheet: View, newState: Int) {  
                Log.d("MainActivity", "<<<< $newState = ${translateSheetState(newState)}")  
            }  
            override fun onSlide(bottomSheet: View, slideOffset: Float) {}  
        })  
    }  
}
BaseActivity.kt
open class BaseActivity : AppCompatActivity() {  
    protected fun translateSheetState(state: Int): String {  
        return when (state) {  
            BottomSheetBehavior.STATE_COLLAPSED -> "STATE_COLLAPSED"  
  BottomSheetBehavior.STATE_DRAGGING -> "STATE_DRAGGING"  
  BottomSheetBehavior.STATE_EXPANDED -> "STATE_EXPANDED"  
  BottomSheetBehavior.STATE_HALF_EXPANDED -> "STATE_HALF_EXPANDED"  
  BottomSheetBehavior.STATE_HIDDEN -> "STATE_HIDDEN"  
  BottomSheetBehavior.STATE_SETTLING -> "STATE_SETTLING"  
  else -> "Unknown state: $state"  
  }  
    }  
}
activity_main5.xml
<androidx.coordinatorlayout.widget.CoordinatorLayout 
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:id="@+id/bottom_sheet"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/holo_orange_light"
        android:orientation="vertical"
        android:scrollbars="none"
        app:layout_behavior="@string/bottom_sheet_behavior">
        <TextView
            android:id="@+id/tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="16dp"
            android:text="@string/short_text"
            android:textSize="16sp" />
    </LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
หากเรามีแผ่นยาวด้านล่างโครงสร้างต่อไปนี้จะทำงานเพื่อเลื่อน:
activity_main6.xml
<androidx.coordinatorlayout.widget.CoordinatorLayout 
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:id="@+id/bottom_sheet"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/holo_orange_light"
        android:orientation="vertical"
        android:scrollbars="none"
        app:layout_behavior="@string/bottom_sheet_behavior">
        <androidx.core.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:id="@+id/tv"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="16dp"
                android:text="@string/long_text"
                android:textSize="16sp" />
        </androidx.core.widget.NestedScrollView>
    </LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>