I have an android application entirely based on immersive mode. I have managed to go edge-to-edge for the entire application but when I open a bottom sheet dialog with peek height of uptop 90% of the screen and a scrollview to accomodate a long form. However, when I open the bottom sheet, there is a blank space at the bottom of the view which is exactly the size of the system navigation bar. Is there a way to remove that space and have the bottom sheet extend right upto the bottom of the screen?
Here's a snapshot of the bottom sheet fully expanded 
EDIT: Added Example of My bottomsheet dialog class-
class MyBottomSheetDialog
constructor(val ctx: Context, val height: Int) :
BaseDialog(ctx) {
...
override fun onStart() {
super.onStart()
binding.root.layoutParams.height = height
binding.root.requestLayout()
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
window?.let {
WindowCompat.setDecorFitsSystemWindows(
it,false
)
}
findViewById<View>(com.google.android.material.R.id.container)?.fitsSystemWindows = false
findViewById<View>(com.google.android.material.R.id.coordinator)?.fitsSystemWindows = false
}
...
}
And The base class is-
open class BaseDialog
constructor(
private val dialogContext: Context) : BottomSheetDialog(dialogContext, style) {
override fun onStart() {
super.onStart()
hideNavigation()
}
private fun hideNavigation() {
window?.apply {
val uiOptions: Int = decorView.systemUiVisibility
val newUiOptions = uiOptions or
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_FULLSCREEN
decorView.systemUiVisibility = newUiOptions
setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
setGravity(Gravity.BOTTOM)
}
}
}
In your bottomSheetFragment
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog =
object : BottomSheetDialog(requireContext(), theme) {
override fun onAttachedToWindow() {
super.onAttachedToWindow()
window?.let {
WindowCompat.setDecorFitsSystemWindows(it, false)
}
findViewById<View>(com.google.android.material.R.id.container)?.apply {
fitsSystemWindows = false
ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->
insets.apply {
view.updatePadding(bottom = 0)
}
}
}
findViewById<View>(com.google.android.material.R.id.coordinator)?.fitsSystemWindows = false
}
}
in themes:
<item name="bottomSheetDialogTheme">@style/BottomSheetDialogTheme</item>
in styles:
<style name="BottomSheetDialogTheme" parent="Theme.Design.Light.BottomSheetDialog">
<item name="bottomSheetStyle">@style/AppModalStyle</item>
<item name="android:navigationBarColor">@color/transparent</item>
<item name="android:windowLightStatusBar">false</item>
<item name="android:windowIsFloating">false</item>
<item name="android:statusBarColor">@color/transparent</item>
</style>
<style name="AppModalStyle" parent="Widget.Design.BottomSheet.Modal">
<item name="android:background">@null</item>
</style>
According to the Material Bottom Sheet doc:
On API 21 and above the modal bottom sheet will be rendered fullscreen (edge to edge) if the navigation bar is transparent and
app:enableEdgeToEdgeistrue. To enable edge-to-edge by default for modal bottom sheets, you can override?attr/bottomSheetDialogThemelike the below example:
<style name="AppTheme" parent="Theme.Material3.*">
...
<item name="bottomSheetDialogTheme">@style/ThemeOverlay.App.BottomSheetDialog</item>
</style>
<style name="ThemeOverlay.App.BottomSheetDialog" parent="ThemeOverlay.Material3.BottomSheetDialog">
<item name="android:navigationBarColor" tools:ignore="NewApi">@android:color/transparent</item>
</style>
in your theme file. See also Google edge to edge training page.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With