导航栏和状态栏在某些设备上不完全透明

问题描述 投票:0回答:3

我正在使用react-native编写一个应用程序,并且我试图在状态栏和导航栏后面显示内容。我通过添加一些代码成功解决了这个问题

styles.xml
。这设法解决了我的问题,但我最近意识到它并不完全适用于所有设备。在我的
Pixel 6
运行
Android 12
上,状态栏和导航栏不是完全透明的。

透明状态栏

我尝试了 Stack Overflow 上建议的许多方法,但没有一个完全有效。我什至设法让它在原生 Android 应用程序上运行,但在反应原生应用程序中编写相同的代码不起作用。

这是我目前在我的

styles.xml
中的代码:

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

    <item name="android:navigationBarColor">@android:color/transparent</item>
    <item name="android:statusBarColor">@android:color/transparent</item>

    <item name="android:enforceStatusBarContrast"  tools:targetApi="q">true</item>
    <item name="android:enforceNavigationBarContrast"  tools:targetApi="q">true</item>
android react-native statusbar navigationbar
3个回答
8
投票

我找到了解决这个问题的方法。正如 Eugen Pechance 指出的那样,我原来的

styles.xml
的前两行是不必要的。然而,造成半透明背景的主要原因是
android:enforceStatusBarContrast
android:enforceNavigationBarContrast
线。 Android 强制实施对比的方式是向状态栏和导航栏添加半透明背景,这不是我认为的工作方式。将这些值设置为
false
就可以了。

此外,根据 this 文章,您应该将以下行添加到

MainActivity.java
获取位于状态和导航视图后面的内容:

@Override
  public void onCreate(@Nullable Bundle savedInstanceState) {
    WindowCompat.setDecorFitsSystemWindows(getWindow(), false);

    super.onCreate(savedInstanceState);
  }

确保覆盖正确的

onCreate
函数,因为 React Native 中默认的覆盖函数不会被调用。


0
投票

尝试在

MainActivity.java
内添加以下代码:
onCreate()

并在 
Window w = getWindow(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); }

文件上确保父级是

不是
任何 DarkActionBar!例如: themes.xml

然后添加:

<style name="MyTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">



0
投票
这可以工作,但是在添加这个干净的 gradlew 并再次构建之后。

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