BottomSheetDialogとは
下から出てくるモーダルのようなDialogです。
初期値の高さを調整する
peekHeight
に初期値にしたい高さを設定して、state
をBottomSheetBehavior.STATE_COLLAPSED
にします。
FirstBottomSheetDialogFragment.kt
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val bottomSheetDialog = BottomSheetDialog(requireContext())
bottomSheetDialog.setOnShowListener { dialog ->
(dialog as? BottomSheetDialog)?.findViewById<FrameLayout>(R.id.design_bottom_sheet)
?.let {
BottomSheetBehavior.from(it).apply {
val displayHeight = getFullScreenHeight() - getStatusBarHeight()
peekHeight = (displayHeight * 0.5).toInt()
state = BottomSheetBehavior.STATE_COLLAPSED
}
}
}
}
private fun getFullScreenHeight(): Int {
// ・・・
}
private fun getStatusBarHeight(): Int {
// ・・・
}
BottomSheetBehavior.STATE_COLLAPSED
は折りたたまれている状態、つまりpeekHeight
の高さの時の状態です。
peekHeight
は普通に数値で指定することができますが、今回は画面サイズの50%という指定をしています。
画面の高さを取得するコード
private fun getFullScreenHeight(): Int {
val manager = requireContext().getSystemService(Context.WINDOW_SERVICE) as WindowManager
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
val metrics = manager.currentWindowMetrics
metrics.bounds.height()
} else {
val metrics = DisplayMetrics()
manager.defaultDisplay.getRealMetrics(metrics)
metrics.heightPixels
}
}
private fun getStatusBarHeight(): Int {
val outRect = Rect()
requireActivity().window.decorView.getWindowVisibleDisplayFrame(outRect)
return outRect.top
}
結果
参考
BottomSheetDialog - Android Developers
【Kotlin】BottomSheetDialogを触ってみた
【Kotlin/Android Studio】画面(スクリーン)の横幅を取得する方法!デバイスサイズ