我想让我的Flutter应用程序占据Android的整个屏幕,同时仍然显示状态栏和导航栏,并且它们都是透明的,以实现iOS中的全屏外观。
状态栏的颜色可以轻松更改,但是现在我在使应用程序充满屏幕并同时使导航栏透明时遇到问题。
默认情况下,该应用程序根本不绘制在导航栏下方(我将状态栏颜色设置为透明):
以下是我尝试过的一些解决方案:
从这里获取的解决方案:https://stackoverflow.com/a/31596735
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
}
这种实现了我想要的,但是有几个问题。 MediaQuery
中的padding和inset值现在为0,因此我必须通过使用MethodChannel
手动获取状态栏和导航栏的高度。此外,这会产生一个与应用程序切换器有关的怪异错误,如下所示(请参阅内容如何跳转以及右上角的调试横幅如何伸展):
此解决方案对我来说似乎很粗略,因为它似乎通过删除窗口inset值来对抗Flutter框架,并且似乎更像是一种变通的解决方法。
<item name="android:windowTranslucentNavigation">true</item>
结果:
这是最接近我想要实现的目标。 MediaQuery.of(context).padding.top
正确显示顶部填充,MediaQuery.of(context).viewInsets.bottom
正确显示导航栏的高度。应用程序切换器中也没有怪异的错误。唯一的问题是导航栏是半透明的,而不是透明的。
这是上面显示的示例应用程序的存储库:https://github.com/CZX123/navbar
如果Flutter可以立即提供此功能,那将很好。但这不是,因此还有其他更好的方法可以实现这一目标吗?
我想我了解您要完成的工作。这会有所帮助吗?
您还需要一个Cupertino脚手架。
https://api.flutter.dev/flutter/cupertino/CupertinoNavigationBar-class.html
如果还有其他想法无法达到您想要的外观。