C-FRONT

エモくありたい

BottomSheetDialogのlandscape対応

Android Working with Bottom Sheet - Persistent and Modal Bottom Sheets

こちらを参考にBottomSheetDialogを拡張したFragmentを使った時のメモです。 理由などは理解していないところもあるので、現象とこうしたら動いたの一例として参考にしてもらえればと思います。

android - BottomSheetDialogFragment doesn't show full height in landscape mode - Stack Overflow

上の記事のように、横回転させるとFragmentの下部が表示されなくなることがあるようです。(Nexus 5X API 24 emulatorで再現) いくつか同じ現象に遭遇しているstackoverflowの記事等はありましたが、自分は以下に記載されている方法で解決しました。

stackoverflow.com

BottomSheetDialogFragmentを継承しているclassを作っている場合、そのclassのonCreateViewに以下を追加すると横回転した時にも正しく表示されます。

 dialog.setOnShowListener { it ->
            val d = it as BottomSheetDialog
            val bottomSheet = d.findViewById<FrameLayout>(R.id.design_bottom_sheet)
            val coordinatorLayout = bottomSheet?.parent
            val bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet)
            bottomSheet?.let {
                bottomSheetBehavior.peekHeight = it.height
                coordinatorLayout?.parent?.requestLayout()
            }
        }

ちなみに自前のlayoutにCoordinateLayoutを使っていなくても動きました。自分の場合はLinearLayoutを使っていました。 また、layoutにapp:layout_behavior="@string/bottom_sheet_behavior" をつけるような記述も見つかりますが、今回の問題には関係ないようです。