BottomSheetカスタムあれこれ
supportLibraryにBottomSheetDialogFragmentというのがあります。 これは下からスッと出てくるダイアログもどきで コンテンツの共有やGoogleMapアプリなどで使われています。
このBottomSheetDialogFragmentを使用する際 独自の動作部分をカスタマイズ出来るのでメモ代わりに残します。
表示後STATE_EXPANDED(全て表示)にしたい!
通常は一部分のみ表示され、上へスワイプすることで全域を見ることが出来るが 初めから全域を表示させたい時。
onCreateDialogをOverrideし setOnShowListenerでStateをEXPANDEDに変える
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val dialog = super.onCreateDialog(savedInstanceState) dialog.setOnShowListener { val d = dialog as BottomSheetDialog val bottomSheet = d.findViewById(android.support.design.R.id.design_bottom_sheet) as FrameLayout val behavior = BottomSheetBehavior.from(bottomSheet) behavior.state = BottomSheetBehavior.STATE_EXPANDED } }
COLLAPSEDを無効にしたい!
一部分のみ見えてる状態をなくしたい時。
EXPANDEDと組み合わせると全画面ダイアログになります。
DialogFragmentでやれ
やっぱりonCreateDialogをoverrideし BottomSheetCallbackを設定する
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val dialog = super.onCreateDialog(savedInstanceState) dialog.setOnShowListener { val d = dialog as BottomSheetDialog val bottomSheet = d.findViewById(android.support.design.R.id.design_bottom_sheet) as FrameLayout val behavior = BottomSheetBehavior.from(bottomSheet) behavior.setBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() { override fun onSlide(bottomSheet: View, slideOffset: Float) { } override fun onStateChanged(bottomSheet: View, newState: Int) { //Drag,Collapsedの時はExpandedにする if (newState == BottomSheetBehavior.STATE_DRAGGING || newState == BottomSheetBehavior.STATE_COLLAPSED) { behavior.state = BottomSheetBehavior.STATE_EXPANDED } } }) } }
[所要時間:8分]