如何改变导航栏的颜色?

我想要一个状态栏半透明和导航栏其他颜色不是半透明的蓝色或白色

我的代码

  @color/colorPrimary @color/colorPrimaryDark @color/colorAccent @android:color/transparent @color/colorPrimary  

活动

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

状态栏半透明好但导航栏没有变色。 为什么?

导航栏

改变导航颜色的方法:

值-V21 / style.xml

 @color/blue_color 

编程方式:

 if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.primary)); } 

检查我以前的答案它肯定会帮助你得到结果。

您可以通过两种方式实现此目的 – 使用样式活动

值-V21 / style.xml

 @color/navigationbar_color 

在Activity中使用Compat库 –

 if (Build.VERSION.SDK_INT >= 21) { getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.primary)); } 

基于我对https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html中的“FLAG_LAYOUT_NO_LIMITS”的理解[ 窗口标志:允许窗口延伸到屏幕外 ]这种标志的使用推出状态栏和导航栏的窗口。 实际上使用style.xml文件并添加行

 #D7DEB5 

要更改白色窗口背景,可以同时记下状态栏符号和导航栏符号,但不能记下它们的条形图。 而且使用以下代码:

 int statusBarColor = w.getStatusBarColor(); String hexStatusBarColor = String.format("#%08X", (0xFFFFFFFF & statusBarColor)); int navigationBarColor = w.getNavigationBarColor(); String hexNavigationBarColor = String.format("#%08X", (0xFFFFFFFF & navigationBarColor)); Log.d("FLAGS", "statusBarColor: " + hexStatusBarColor + " -- navigationBarColor: " + hexNavigationBarColor); 

你看到statusBarColor(“#00000000”完全透明)和navigationBarColor被正确设置但是因为窗外没有显示。

现在不使用标志“FLAG_LAYOUT_NO_LIMITS”,你得到一个透明的statusBar(与windowBackground颜色相同)以及希望的导航栏颜色,但此时还不确定代码试图通过使用此标志获得的其他内容。