Как перехватить видимость нижней панели навигации Android после прокрутки вверх

#c# #android #xamarin.android

#c# #Android #xamarin.android

Вопрос:

Мой Xamarin.Фрагмент Android MvvmCross реализует представление.IOnSystemUiVisibilityChangeListener
Вот метод фрагмента OnViewCreated

 View _decorview = ParentActivity.Window.DecorView;
_decorview.SetOnSystemUiVisibilityChangeListener(this);
var uiOptions =
                SystemUiFlags.HideNavigation |
                SystemUiFlags.ImmersiveSticky;
            _decorview.SystemUiVisibility = (StatusBarVisibility)uiOptions;
  

Вот OnSystemUiVisibilityChange метод:

 public void OnSystemUiVisibilityChange([GeneratedEnum] StatusBarVisibility visibility)
        {
            if (((int)visibility amp; (int)SystemUiFlags.HideNavigation) == 0)
            {
                if (ParentActivity.BottomNavigation != null)
                    ParentActivity.BottomNavigation.Visibility = ViewStates.Gone;
            }
            else
            {
                if (ParentActivity.BottomNavigation != null)
                    ParentActivity.BottomNavigation.Visibility = ViewStates.Visible;
            }
        }
  

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

Ответ №1:

Флаг SystemUiFlags.ImmersiveSticky предотвращает получение обратного вызова при изменении видимости системного пользовательского интерфейса

Комментарии:

1. Спасибо за ваш обмен, пожалуйста, примите ваш ответ (нажмите ✔ в верхнем левом углу этого ответа) через два дня, это поможет другим, у кого есть подобная проблема.

Ответ №2:

AlexTsy.

Я согласен с тем, что в документации указано, что ImmersiveSticky предотвращает получение обратного вызова.

Однако, когда я перешел на Android 10, у меня возникли проблемы со всеми моими липкими мерцающими экранами при вращении. Снова появится ложная системная панель. Не при каждом повороте, но вращайте достаточное количество раз, и они начнут появляться. Все эти экраны отлично работали с Android 9 и ниже и по-прежнему обходились без обратного вызова, но любому устройству Android 10 требуется обратный вызов. В отчаянии я попытался добавить представление.IOnSystemUiVisibilityChangeListener к фрагменту, и это исправило его. Дополнительный код не оказал никакого негативного влияния на устройства с Android 9 или менее.

Комментарии:

1. Спасибо за ваш комментарий. Я буду помнить об этом. Я заменил ImmersiveSticky на Immersive