问题描述
我有一个应用可以在全屏(没有状态栏,仅限于横向)和常规(有状态栏,没有方向限制)之间切换。
我正在使用服务依赖项通过布尔标志调用 MainActivity
上的方法。
我使用了两种不同的方法来切换全屏设置:设置 Window.DecorView.systemUIVisibility
和在 Window 上添加/清除标志。在下面的代码中,第二种方法被注释掉了:
if (fullScreenOn)
{
Window.DecorView.systemUIVisibility = (StatusBarVisibility)(
systemUIFlags.Fullscreen
| systemUIFlags.HideNavigation
| systemUIFlags.Immersive
| systemUIFlags.ImmersiveSticky
| systemUIFlags.LowProfile
| systemUIFlags.LayoutStable
| systemUIFlags.LayoutHideNavigation
| systemUIFlags.LayoutFullscreen
);
//Window.AddFlags(WindowManagerFlags.Fullscreen);
RequestedOrientation = Screenorientation.Landscape;
}
else
{
Window.DecorView.systemUIVisibility = (StatusBarVisibility)(
systemUIFlags.LayoutStable
| systemUIFlags.LayoutHideNavigation
| systemUIFlags.LayoutFullscreen
);
//Window.ClearFlags(WindowManagerFlags.Fullscreen);
RequestedOrientation = Screenorientation.Unspecified;
}
我尝试从不同的地方调用依赖方法:OnAppearing()
和 Ondisappearing()
在全屏页面中,在所有页面中,在所有页面中只是 OnAppearing()
在打开新页面或回退到现有页面时,来自我的导航代码的相同版本。
该应用程序从一个普通页面开始,直到查看全屏页面之一并在状态栏返回时返回普通页面后,它才能正常工作,但该页面使用了屏幕的全高并重叠为结果。
还有一个次要的烦恼,那就是即使从一个全屏页面转到另一个页面,状态栏也会弹出。
该应用的 iOS 版本没有这些问题。显然,它在依赖方法中使用了不同的实现。
编辑
我创建了一个最小的应用程序,它重现了 https://github.com/aptwebapps/StatusBarBug 的主要问题。有趣的是,在两个全屏页面之间移动时,它不会受到状态栏弹出和弹出的烦恼。