すわりんのブログ

androidとかサブカルとかのブログです

BottomSheetカスタムあれこれ

supportLibraryにBottomSheetDialogFragmentというのがあります。 これは下からスッと出てくるダイアログもどきで コンテンツの共有やGoogleMapアプリなどで使われています。

このBottomSheetDialogFragmentを使用する際 独自の動作部分をカスタマイズ出来るのでメモ代わりに残します。

以下の記事を参考にしました。 http://qiita.com/napplecomputer/items/5b3d1225533a59488ac3#bottomsheet%E3%81%AE%E8%A1%A8%E7%A4%BA%E4%BD%8D%E7%BD%AE%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B

表示後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分]