windowLightNavigationBar 在 Android 10(Q)上无法工作

5

我试图使导航栏变得轻盈,上面有暗色圆点。因此,我使用了windowLightNavigationBar = true来创建style-v27.xml:

    <item name="android:windowLightNavigationBar">true</item>
    <item name="android:navigationBarColor">@android:color/white</item>

该功能在API Level 27及以上版本中可用,且:
  • 它在API 27(Android 8.1)- 模拟器上运行良好
  • 它在API 28(Android 9)- 模拟器上运行良好
  • 它在API 29(Android 10)- 模拟器上不起作用

在Android 10上,点仍然保持白色,背景也是白色!:

输入图像描述

顺便说一下,我以API 29为目标。我已经在“模拟器”上进行了测试。我无法访问真正的Android 10设备以确认该错误是否存在。


https://dev59.com/STABtIcB2Jgan1znFWAM#56870080 - IntelliJ Amiya
1
@IntelliJAmiya,感谢您的回复!我已经阅读了那个主题。但那不是我想要的,也不是我的意思。在API 27和API 28上,我可以很好地获得这个功能。问题出在API 29(Android 10)上。 - Saeed Arianmanesh
3个回答

1

这是一个 AVD 的 bug,而不是 Android 平台的 bug。关闭 Android Q AVD 并更新 Android 10 SDK 系统文件,重新打开 AVD,问题解决。

如果这没有帮助,请删除 AVD 并重新创建它。


我在搭载Android 10(QP1A.191005.007.A3)的Pixel上遇到了这个问题。所以这不仅仅是AVD的问题。 - Tomas
2
经过几个小时的调试,我发现这是在 Google Pixel 上与此行代码相结合时发生的:window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE,在其他所有 Android 版本(模拟器中)都正常工作。 - Tomas
1
@Tomas 你是我的英雄!我已经花了数小时尝试调试并找出哪个随机标志导致了这个问题的发生!禁用SYSTEM_UI_FLAG_LAYOUT_STABLE才是我需要的解决方法! - JKuester

1
如果您已经设置了系统UI可见性(例如View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR),则可以通过onCreate()在您的主活动中完成此操作:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
}

感谢@tomas


0
你可以试试这个:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
    window.navigationBarColor = ContextCompat.getColor(this, android.R.color.white)
    WindowInsetsControllerCompat(window, window.decorView).isAppearanceLightNavigationBars = true
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接