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の記事等はありましたが、自分は以下に記載されている方法で解決しました。
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"
をつけるような記述も見つかりますが、今回の問題には関係ないようです。