Скрыть строку состояния при отображении BottomSheetDialog

У меня полный экран Activity, вот весь связанный код того, как я делаю это в полноэкранном режиме:


Manifest.xml

<activity
    android:name=".Player"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen.player" />

styles.xml

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen.player" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

Деятельность onCreate

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

Затем я показываю BottomSheetDialog, как показано ниже:

bottomSheetDialog = new BottomSheetDialog(this);
bottomSheetDialog.setContentView(dialogView);
bottomSheetDialog.show();

У меня проблема, когда я показываю BottomSheetDialog, то StatusBar также отображается.

Я заметил, что StatusBar скрывается, когда отображается диалоговое окно покупки в приложении, и мне кажется, что это BottomSheetDialog.

Как мне не показывать StatusBar когда я показываю BottomSheetDialog?

3 ответа

Возможно, уже поздно ответить на этот вопрос. Для справки других,StatusBar не будет отображаться, если следующие флаги установлены перед возвратом onCreateView метод:

dialog?.window?.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN)

Это применяется при отображении модального диалогового окна нижнего листа с BottomSheetDialogFragment. Проверено на устройстве под управлением Android 8.0.

Для упорных нижних листов с BottomSheetBehavior, просто примените полноэкранную тему к Activity или установите android:windowFullscreen атрибут true на Activityподойдет тема.

Я применил тему к своему BottomSheetDialog, и она отлично работает для меня.

Это мое v21/styles.xml:

PS: Я использовал это дляwindowContentTransitions в моей теме, следовательно, использовать не обязательно.

<style name="AppTheme.RoundedBottomDialog">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:popupMenuStyle">@style/PopupMenu</item>
        <item name="bottomSheetDialogTheme">@style/AppBottomSheetDialogTheme</item>
    </style>
    <style name="AppBottomSheetDialogTheme"
        parent="Theme.Design.Light.BottomSheetDialog">
        <item name="bottomSheetStyle">@style/AppModalStyle</item>
    </style>

    <style name="AppModalStyle"
        parent="Widget.Design.BottomSheet.Modal">
        <item name="android:background">@drawable/white_bottom_sheet</item>
    </style>

Это мое styles.xml:

 <style name="AppTheme.RoundedBottomDialog">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:popupMenuStyle">@style/PopupMenu</item>
        <item name="bottomSheetDialogTheme">@style/AppBottomSheetDialogTheme</item>
    </style>
    <style name="AppBottomSheetDialogTheme"
        parent="Theme.Design.Light.BottomSheetDialog">
        <item name="bottomSheetStyle">@style/AppModalStyle</item>
    </style>

    <style name="AppModalStyle"
        parent="Widget.Design.BottomSheet.Modal">
        <item name="android:background">@drawable/white_bottom_sheet</item>
    </style>

И я применил это к <activity> нравиться,

<activity
            android:name=".SomeActivity"
            android:configChanges="locale|orientation|keyboardHidden"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme.RoundedBottomDialog"
            android:windowSoftInputMode="adjustResize|stateAlwaysHidden" />

Я решаю это, вызывая hideStatusBar после метода dialog show(). Я использую стиль котлина.

          fun hideStatusBar() {
    val uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
            View.SYSTEM_UI_FLAG_FULLSCREEN
    window?.decorView?.systemUiVisibility = uiOptions
}
Другие вопросы по тегам