【发布时间】:2019-10-29 16:21:20
【问题描述】:
我想让我的 Flutter 应用在 Android 中占据整个屏幕,同时仍然显示状态栏和导航栏,并且它们都是透明的,以实现iOS 中的全屏外观。
状态栏颜色可以轻松更改,但现在我遇到了让应用填满屏幕并同时使导航栏透明的问题。
默认情况下,应用根本不绘制在导航栏下方(我已将状态栏颜色设置为透明):
以下是我尝试过的一些解决方案:
1) 在MainActivity的onCreate函数中设置窗口的flags
从这里获取的解决方案: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 手动获取状态栏和导航栏高度。此外,这会产生一个关于应用程序切换器的奇怪错误,如下所示(查看内容如何跳转和右上角的调试横幅被拉伸):
2) 在styles.xml中添加半透明导航
<item name="android:windowTranslucentNavigation">true</item>
结果:
这是最接近我想要实现的目标。 MediaQuery.of(context).padding.top 正确显示顶部填充,MediaQuery.of(context).viewInsets.bottom 正确显示导航栏的高度。应用程序切换器中也没有奇怪的错误。唯一的问题是导航栏是半透明的而不是透明的。
这是上面显示的示例应用程序的存储库:https://github.com/CZX123/navbar
如果 Flutter 能够开箱即用地提供此功能,那就太好了。但事实并非如此,那么还有其他更好的方法来实现这一点吗?
更新
看来我们得等 Flutter 团队正式实现这个功能了:
https://github.com/flutter/flutter/issues/40974
https://github.com/flutter/flutter/issues/34678
这条评论也完美总结了Android中的当前行为:https://github.com/flutter/flutter/issues/34678#issuecomment-536028077
【问题讨论】:
-
这能回答你的问题吗? Transparent bottom navigation bar in flutter
-
不,这不是关于这个的。这个问题是关于实际系统 UI 导航(如 Android Q 中介绍的)在 Flutter 中无法正确呈现。
-
有没有找到让系统导航栏透明的解决方案?
标签: flutter dart uinavigationbar flutter-layout transparent