Выход из режима иммерсивного режима - PullRequest
0 голосов
/ 07 мая 2018

Я написал следующий код для ввода действия в режим погружения.

decorView = Window.DecorView;
var uiOptions = (int)decorView.SystemUiVisibility;
var newUiOptions = (int)uiOptions;
newUiOptions |= (int)SystemUiFlags.LowProfile;
newUiOptions |= (int)SystemUiFlags.Fullscreen;
newUiOptions |= (int)SystemUiFlags.HideNavigation;
newUiOptions |= (int)SystemUiFlags.Immersive;  
newUiOptions |= (int)SystemUiFlags.ImmersiveSticky;
decorView.SystemUiVisibility = (StatusBarVisibility)newUiOptions;

Это отлично работает, и я получаю идеальный режим погружения.

Теперь проблема в том, что когда я использую следующий код для выхода из иммерсивного режима, он выходит из иммерсивного режима, но превращает мою строку состояния и панель навигации в белый цвет.

ДО ИМЕРСИВНОГО РЕЖИМА:

enter image description here

Строка состояния и навигация светятся

ПОСЛЕ ВЫХОДА ИЗ ИМЕРСИВНОГО РЕЖИМА:

enter image description here

Для выхода из режима погружения я использую следующий код

decorView = Window.DecorView;
decorView.SystemUiVisibility = StatusBarVisibility.Visible;

Я пробовал несколько других вещей, таких как следующее

Как полностью выйти из полноэкранного режима с погружением?

https://developer.android.com/training/system-ui/immersive

Они работают, но все с белой строкой состояния и панелью навигации.

Кроме того, да, я использую LightStatusBar и LightNavigationBar, но даже настройки, которые при выходе из иммерсивного режима не работают, такие как

decorView = Window.DecorView;
var uiOptions = (int)decorView.SystemUiVisibility;
var newUiOptions = (int)uiOptions;
newUiOptions |= (int)SystemUiFlags.LightNavigationBar;
newUiOptions |= (int)SystemUiFlags.LightStatusBar;
decorView.SystemUiVisibility = (StatusBarVisibility)newUiOptions;

Что бы я ни делал, я просто не могу вернуть строку состояния и панель навигации в нормальное состояние после выхода из режима погружения

Есть идеи по этому поводу?

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="android:windowNoTitle">true</item>    
    <item name="android:statusBarColor">#ffffff</item>    
    <item name="android:windowLightStatusBar">true</item>
    <item name="android:navigationBarColor">@color/colorPrimary</item>
    <item name="android:windowLightNavigationBar">true</item>
    <item name="android:actionBarStyle">@style/CustomActionBarStyle</item>
  </style>

  <style name="CustomActionBarStyle" parent="Theme.AppCompat.Light.NoActionBar">    
    <item name="android:titleTextStyle">@style/NoTitleText</item>
    <item name="android:subtitleTextStyle">@style/NoTitleText</item>
  </style>

  <style name="NoTitleText">
    <item name="android:textSize">0sp</item>
    <item name="android:textColor">#00000000</item>
  </style>

Приветствия

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Если это кому-то может помочь, я нашел решение, посмотрев на это https://developer.xamarin.com/samples/monodroid/AdvancedImmersiveMode/ Таким образом, для полного выхода из режима погружения необходимо установить те же параметры пользовательского интерфейса, но с другими значениями, такими как

Вход в режим погружения

 decorView = Window.DecorView;
                var uiOptions = (int)decorView.SystemUiVisibility;
                var newUiOptions = (int)uiOptions;
                newUiOptions |= (int)SystemUiFlags.LowProfile;
                newUiOptions |= (int)SystemUiFlags.Fullscreen;
                newUiOptions |= (int)SystemUiFlags.HideNavigation;
                newUiOptions |= (int)SystemUiFlags.Immersive;
                // This option will make bars disappear by themselves
                newUiOptions |= (int)SystemUiFlags.ImmersiveSticky;
                decorView.SystemUiVisibility = (StatusBarVisibility)newUiOptions;

Выход из режима погружения

decorView = Window.DecorView;
                var uiOptions = (int)decorView.SystemUiVisibility;
                var newUiOptions = (int)uiOptions;
                newUiOptions &= ~(int)SystemUiFlags.LowProfile;
                newUiOptions &= ~(int)SystemUiFlags.Fullscreen;
                newUiOptions &= ~(int)SystemUiFlags.HideNavigation;
                newUiOptions &= ~(int)SystemUiFlags.Immersive;                
                newUiOptions &= ~(int)SystemUiFlags.ImmersiveSticky;
                decorView.SystemUiVisibility = (StatusBarVisibility)newUiOptions; 

Так что в основном те же опции, но с использованием & вместе с ~ вместо OR

Надеюсь, это кому-нибудь поможет - тот же код в ссылке полезен для получения дополнительной информации.

0 голосов
/ 11 мая 2018

В вашем styles.xml файле измените это:

<item name="android:statusBarColor">#ffffff</item>

на это:

 <item name="android:statusBarColor">@color/colorPrimary</item>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...