Android Lollipop更改导航栏颜色


137

在我的应用中,我需要更改底部导航栏的颜色。我看了很多帖子,但找不到解决方案。我正在使用appCompat库。

在此处输入图片说明

v21 / styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light">
       <item name="android:windowBackground">@drawable/bgpreview</item>
       <item name="android:colorPrimary">@color/MyColor</item>
       <item name="android:colorPrimaryDark">@color/MyColor</item>
       <item name="android:windowContentOverlay">@null</item>
       <item name="android:textColorPrimary">@color/MyColor</item>
       <item name="colorAccent">@color/MyColor</item>
       <!-- darker variant for the status bar and contextual app bars -->
       <item name="android:windowContentTransitions">true</item>
       <item name="android:windowAllowEnterTransitionOverlap">true</item>
       <item name="android:windowAllowReturnTransitionOverlap">true</item>
       <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
       <item name="android:windowSharedElementExitTransition">@android:transition/move</item>

       <item name="windowActionBar">false</item>
       <item name="android:textAllCaps">false</item>

</style>

可以发布style.xml文件吗?不是全部。刚刚相关的摘要
Blackbelt,

如何设置默认颜色?
GMX

Answers:


262

可以在styles.xml中使用

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

要么

window.setNavigationBarColor(@ColorInt int color)

http://developer.android.com/reference/android/view/Window.html#setNavigationBarColor(int)

请注意,该方法是在Android Lollipop中引入的,不适用于API版本<21。

第二种方法(可在KitKat上使用)是在清单中将windowTranslucentNavigation设置为true并将彩色视图放置在导航栏下方。


谢谢。我在样式代码中添加了<item name =“ android:navigationBarColor”> @ color / MyColor </ item>,现在可以使用了。
user3065901 2015年

31
有没有办法改变图标的​​颜色?
Jamsheed Kamarudeen 2015年

10
<item name="android:navigationBarColor">@color/theme_color</item>values-21文件夹中添加
Pratik Butani 2015年

还要确保(目标Android版本)设置为至少API 21
MujtabaFR

2
请勿将其放在样式文件中,<item name="android:windowDrawsSystemBarBackgrounds">false</item>否则系统栏着色将不起作用。
Alexey Ozerov '16

70

这是编程方式的方法:

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

使用Compat库:

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

这是在values-v21 / style.xml文件夹中使用xml的方法:

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

1
这是一个奇怪的选择!我有一个应用程序,使导航栏带有黑色按钮,因此黑色,因此无法看到主页/后退/最近的软按钮……
JohnyTex

37

以下是更改导航栏颜色的一些方法。

通过XML

1- values-v21 / style.xml

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

或者,如果您只想使用values /文件夹来做,那么-

2-values / style.xml

<resources xmlns:tools="http://schemas.android.com/tools">

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

您也可以通过编程更改导航栏颜色。

 if (Build.VERSION.SDK_INT >= 21)
    getWindow().setNavigationBarColor(getResources().getColor(R.color.navigationbar_color));

通过使用Compat库-

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

请找到更多详细信息的链接-http: //developer.android.com/reference/android/view/Window.html#setNavigationBarColor( int


我无法使用tools:targetApi?此功能过时了吗?
winklerrr

1
@winklerrr尚未过时,请参阅我的最新答案。
D_Alpha

如果我决定以编程方式更改颜色-我是否需要在每个Activity/中进行更改Fragment?还是在某个地方应该做?也许在课堂上延伸Application
Winklerrr

1
您需要在每个活动中执行此操作,也可以为不同的活动设置不同的样式。
D_Alpha

不需要重写styles.xml,而使用tools:targetApi
Farshad Tahmasbi

8

您可以在values-v21 / style.xml文件夹中添加以下行:

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

1

您还可以使用主题编辑器通过单击以下主题来修改主题:

工具-> Android->主题编辑器

然后,您甚至不需要在.xml或.class文件中添加一些额外的内容。


不错的提示!对我来说,它只是在“工具”->“主题编辑器”下。
山姆

现在,主题编辑器从3.3开始消失了。
珍妮丝

1
  1. 创建黑色: <color name="blackColorPrimary">#000001</color> (not #000000)
  2. 用风格写: <item name="android:navigationBarColor" tools:targetApi="lollipop">@color/blackColorPrimary</item>

问题是android更高版本使#000000变得透明


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.