Скрыть строку состояния при отображении 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
}