我尝试使用这个:
<item name="android:navigationBarColor">?attr/colorSurface</item>
我最近切换到材质 3。
如果您想要应用程序的完整代码:https://github.com/Sujal1245/WALLisWALL-Wallpaper-App
Material Components 库中的 1.5.0 版本(特别是 1.5.0-alpha03)及更高版本中有一个新类可以解决这个问题,即 SurfaceColors 类。
要使用它,请对
getColor
枚举中的常量值之一调用 SurfaceColors
方法以获得所需的颜色。这是一个例子:
getWindow().setNavigationBarColor(SurfaceColors.SURFACE_2.getColor(this));
SURFACE_2
是 BottomNavigationView
使用的内容(或其等效内容)。无论有没有动态着色(包括夜间模式),它都可以工作。我还观察到这个解决方案在 Google 文件应用程序中使用。
如果您还对 Google 用于
BottomNavigationView
的确切阴影感到好奇,它是一个 5dp 高的渐变,可绘制从 #00000000 到 #33333333。
除了尼克的回答。如果您使用动态着色。设置动态着色后调用该方法。否则,你将始终得到相同的颜色,而没有动态效果。
Kotlin 代码
DynamicColors.applyIfAvailable(this) // After this
window.navigationBarColor = SurfaceColors.SURFACE_2.getColor(this)
谢谢。
我发现,使用 API35 和 EdgeToEdge,现有答案会导致导航栏的颜色与
BottomNavigationView
略有不同。相反,在我的情况下,在 Activity 中启用 EdgeToEdge 就足够了,如下所示:
@Override
protected void onCreate(final Bundle savedInstanceState) {
EdgeToEdge.enable(
this,
SystemBarStyle.auto(Color.TRANSPARENT, Color.TRANSPARENT),
SystemBarStyle.light(Color.TRANSPARENT, Color.TRANSPARENT));
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ...
}
这将使导航栏透明,并且它将采用
BottomNavigationView
的颜色。