如何更改导航栏颜色?

时间:2017-12-24 11:05:13

标签: java android

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

我的代码

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:navigationBarColor">@color/colorPrimary</item>
    </style>

活动

 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);
        } 

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

navigation bar

3 个答案:

答案 0 :(得分:4)

更改导航颜色的方法:

<强>值-V21 / style.xml

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

以编程方式:

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

答案 1 :(得分:1)

检查我之前的Answer肯定会帮助您获得结果。

您可以通过两种方式实现这一目标 - 使用样式活动

<强>值-V21 / style.xml

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

在活动中使用Compat库 -

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

答案 2 :(得分:1)

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

<color name="myWindowBackground">#D7DEB5</color> 

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

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相同的颜色)以及所希望的导航栏颜色,但此时还不确定代码试图通过使用这个标志获得的其他内容。