当前位置: 首页 > 知识库问答 >
问题:

如何让flutter app在安卓导航栏后面画,让导航栏全透明?

柴博
2023-03-14

我想让我的Flutter app在Android中占据整个屏幕,同时仍然同时显示状态栏和导航栏,并且两者都是透明的,以实现iOS中的全面屏外观。

状态栏的颜色可以很容易地改变,但现在我面临的问题是如何让应用程序填满屏幕,同时使导航栏透明。

默认情况下,app根本不会绘制在导航栏下方(我已经将状态栏颜色设置为透明):

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

解决方案摘自此处: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中的填充和插入值现在为0,因此我必须通过使用methodchannel手动获取状态栏和导航栏高度。此外,这还创建了一个关于应用程序切换器的奇怪bug,如下所示(看看内容是如何跳转的,右上方的调试横幅是如何拉伸的):

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

结果:

这是最接近我想要达到的目标。mediaquery.of(context).padding.top正确显示顶部填充,而mediaquery.of(context).viewinsets.bottom正确显示navbar的高度。在应用程序切换器中也没有奇怪的bug。唯一的问题是navbar是半透明的,不是透明的。

下面是上面显示的示例应用程序的回购: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

共有2个答案

司宏伯
2023-03-14

这可能有些晚了,但flutter的最新版本1.12提供了一个将应用程序绘制在导航栏后面的特性,因此下面的代码将使透明导航栏与应用程序完全扩展到导航栏后面,

Scaffold(
  extendBodyBehindAppBar: true, //this ensures that the body is drawn behind the navigation bar as well
  appBar: AppBar(
    backgroundColor: Colors.transparent,
    title: Text('Transparent Bar'),
  ),
  body: Container(
    color: Colors.blue,
  ),
);
山森
2023-03-14

因此,如果您使用Flutter,程序是:

  1. AppBar()颜色设置为透明。
  2. extendbeyondappbar设置为true
  3. 高度设置为0。

例如:

null

    return Scaffold(
        extendBodyBehindAppBar: true,
        appBar: AppBar(
           elevation: 0,
           )
 类似资料:
  • 我想在我的应用程序上有一个透明的状态栏(所以背景在后面),但我希望底部的导航栏保持黑色。 我可以通过设置

  • 我一直在Stack上寻找一些关于这个的指导,但是没有一个问题被问到这么深,答案也没有更新到最新的Swift版本,甚至没有更新到最新的Swift版本。 这是我所拥有的: 带有两个栏项目的导航控制器: 我的目标是:使导航根视图控制器的导航栏透明(但按钮和标题仍然可见),而不是子导航——没有奇怪的细微差别,比如之前的彩色闪光,或切断导航栏(参见gif) 我尝试过的事情: 在<代码>视图将出现(u动画:B

  • 我正在创建一个应用程序,我在互联网上浏览,我想知道他们是如何使这个透明的UINavigationBar像这样: 我在appdelegate中添加了以下内容: 但这只会让它看起来像: 如何使导航栏像第一个图像一样透明?

  • 我想制作一个完全透明的状态栏和导航栏,就像Google Play那样。当我使用窗口设置来实现它时,键盘会覆盖编辑文本。 当此代码使用键盘输入覆盖的编辑文本时: 此外,该代码并没有使其完全透明,它只是使其半透明 还是这个

  • 我想将导航栏更改为完全透明,如下图所示。 我试过

  • 导航栏是一个将商标、导航以及别的元素简单放置到一个简洁导航页头的的包裹。它很容易扩展,而且,在折叠板插件的帮助下,它可以轻松与幕后内容整合。 基础 这些是你开始使用导航条之前需要知道的东西: 导航条要求一个包裹的.navbar以及一个配色方案类(可以是.navbar-default或者.navbar-inverse)。 当在一个导航条中使用多个组件时,必须用一些 对齐类 。 导航条以及它们的内容默