半扩展比率的值必须设置为介于0和1之间的互斥值,因此,请将此值设置为一个非常小的数字,该数字肯定小于您的窥视高度,例如“ 0.0001f”。使用此值,您甚至都不会看到STATE_HALF_EXPANDED
状态。状态将在STATE_EXPANDED
和之间波动STATE_COLLAPSED
。
替代解决方案
上面的解决方案有效并且可以有效地禁用STATE_HALF_EXPANDED
状态,但是它是hackish(IMO)的,将来可能会破坏。例如,如果对半张开的比例(在窥视高度和全高之间)的合理值被强制执行怎么办?那会很麻烦。
OP规定的要求是,底板应在窥视高度和全高度之间过渡。窥视高度没有问题,但是OP指定isFitToContents = false
要达到全高。(我假设他的底页可能短于可用空间。)
不幸的是,当isFitToContents == false
引入额外的“半高”行为时,OP希望避免这种行为,因此是个问题。
除了“半高”行为外,还引入了另一个行为,即“扩展偏移”。扩展的偏移量指定底片将从全屏停止多远。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>