如何更改系统导航栏颜色

时间:2014-12-07 21:59:19

标签: android android-5.0-lollipop

Android 5.0 指南中,导航栏似乎可自定义: http://www.google.com/design/spec/layout/structure.html#structure-system-bars

如何更改导航栏颜色? 我想用白色风格。

截图: enter image description here enter image description here enter image description here enter image description here


编辑:在我的资源中,我测试了样式:

<item name="android:navigationBarColor" tools:targetApi="21">@android:color/white</item>

但按钮是白色的。我想要与第二张图像相同的渲染器。

enter image description here

9 个答案:

答案 0 :(得分:18)

从API 27开始,现在可以使用导航栏的灯光样式:

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

来自documentation

windowLightNavigationBar

  

如果设置,将绘制导航栏,使其与灯光导航栏背景兼容。

     

要使此操作生效,窗口必须绘制系统栏   windowDrawsSystemBarBackgrounds和导航的背景   酒吧一定不能要求半透明   windowTranslucentNavigation。对应设定   装饰视图上的SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR。

答案 1 :(得分:17)

活动中使用此功能。

 if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setNavigationBarColor(getResources().getColor(R.color.green));
    }

答案 2 :(得分:7)

导航栏不应该是彩色的

  

自定义导航和状态栏时,要么使它们都透明,要么只修改状态栏。在所有其他情况下,导航栏应保持黑色。

(来源https://developer.android.com/training/material/theme.html

但是,您可以使用此库来实现您想要的:) https://github.com/jgilfelt/SystemBarTint

答案 3 :(得分:5)

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setNavigationBarColor(getResources().getColor(R.color.colorWhite));
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); //For setting material color into black of the navigation bar
    }

如果您的应用的API级别大于23,请使用此值

getWindow().setNavigationBarColor(ContextCompat.getColor(MainActivity.this, R.color.colorWhite));
        getWindow().getDecorView().setSystemUiVisibility(SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);

此代码可能不适用于API级别30。因为API级别30不推荐使用“ SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR”。 检查一下: https://developer.android.com/reference/android/view/View#SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR

答案 4 :(得分:4)

在你的v21 / style

中添加这个linle

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:navigationBarColor">@color/colorPrimaryDark</item>
</style>

答案 5 :(得分:2)

您还可以通过编程方式在API 26中设置灯光系统导航栏:

View.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);

其中View coluld为findViewById(android.R.id.content)

但请记住:

  

要使此操作生效,该窗口必须请求FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,但不能FLAG_TRANSLUCENT_NAVIGATION

请参阅documentation

答案 6 :(得分:2)

使用此简单行根据您的屏幕背景色更改导航栏颜色

Function

否则,您可以在导航栏中使用灯光样式

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

答案 7 :(得分:2)

 getWindow().setNavigationBarColor(ContextCompat.getColor(MainActivity.this,R.color.colorPrimary)); //setting bar color   
 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); //additional setting items to be black if using white ui  

答案 8 :(得分:1)

老问题。但是这个时候我们有一个直接的解决方案。可能对某人有帮助。

public static void setNavigationBarColor(Activity activity, int color, int divColor) {
    Window window= activity.getWindow();
    window.setNavigationBarColor(color);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        window.setNavigationBarDividerColor(divColor);
    }
}

View Official Documentation