如何使Flutter应用在Android导航栏后面绘制并使导航栏完全透明?

问题描述 投票:8回答:1

我想让我的Flutter应用程序占据Android的整个屏幕,同时仍然显示状态栏和导航栏,并且它们都是透明的,以实现iOS中的全屏外观。

状态栏的颜色可以轻松更改,但是现在我在使应用程序充满屏幕并同时使导航栏透明时遇到问题。

默认情况下,该应用程序根本不绘制在导航栏下方(我将状态栏颜色设置为透明):

default app without modifications

以下是我尝试过的一些解决方案:

1)在MainActivity的onCreate函数中在窗口上设置标志

从这里获取的解决方案: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手动获取状态栏和导航栏的高度。此外,这会产生一个与应用程序切换器有关的怪异错误,如下所示(请参阅内容如何跳转以及右上角的调试横幅如何伸展):

solution 1 bug

此解决方案对我来说似乎很粗略,因为它似乎通过删除窗口inset值来对抗Flutter框架,并且似乎更像是一种变通的解决方法。

2)在styles.xml中添加半透明导航

<item name="android:windowTranslucentNavigation">true</item>

结果:

solution 2 result

这是最接近我想要实现的目标。 MediaQuery.of(context).padding.top正确显示顶部填充,MediaQuery.of(context).viewInsets.bottom正确显示导航栏的高度。应用程序切换器中也没有怪异的错误。唯一的问题是导航栏是半透明的,而不是透明的。

这是上面显示的示例应用程序的存储库:https://github.com/CZX123/navbar

如果Flutter可以立即提供此功能,那将很好。但这不是,因此还有其他更好的方法可以实现这一目标吗?

android flutter flutter-layout
1个回答
0
投票

我想我了解您要完成的工作。这会有所帮助吗?

您还需要一个Cupertino脚手架。

https://api.flutter.dev/flutter/cupertino/CupertinoNavigationBar-class.html

如果还有其他想法无法达到您想要的外观。

© www.soinside.com 2019 - 2024. All rights reserved.