我之前使用过这个question上的一些解决方案来直接在状态栏下面偏移一个PopUpWindow窗口。只要应用程序尚未设置为“全屏应用程序”,S8 +(报告状态栏高度为84像素)就可以正常工作。
如果应用已在设置 - >下设置为“全屏应用”显示 - >全屏应用程序,PopUpWindow不会直接显示在(仍然可见)状态栏下方。虽然系统仍然报告状态栏高度为84像素,但此时的正确偏移为0.
我可以通过计算屏幕的宽高比来解决这个问题,如果它是1.9388889,那么应用程序处于全屏模式,因此PopUpWindow偏移可以设置为0.
然而,这感觉很脆弱,我不确定这将如何在其他支持高宽高比(LG6等)的设备上运行。理想情况下,我有办法检测应用程序是否在全屏运行而不依赖于特定的宽高比。这看起来很理想:
boolean fullScreen = (getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0;
...但是在运行应用程序设置为全屏应用程序的S8 +上它返回false。它似乎是全屏模式和全屏应用程序是两个不同的概念。
有没有更好的方法来检测某些内容作为全屏应用程序运行,而不是使用特定的宽高比?或者,一种更健壮的方法来计算所需的状态栏偏移量,这将处理此全屏应用程序场景?