Android棒棒糖更改导航栏颜色

Posted

技术标签:

【中文标题】Android棒棒糖更改导航栏颜色【英文标题】:Android lollipop change navigation bar color 【发布时间】:2015-03-06 12:10:43 【问题描述】:

在我的应用程序中,我需要更改底部导航栏的颜色。我看了很多帖子,但找不到解决方案。我正在使用 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 文件吗?不是全部。只是相关的sn-ps 如何设置回默认颜色? 【参考方案1】:

可以在 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 版本

第二种方法(适用于 KitKat)是在清单中将 windowTranslucentNavigation 设置为 true,并在导航栏下方放置一个彩色视图。

【讨论】:

有没有办法改变图标的​​颜色? &lt;item name="android:navigationBarColor"&gt;@color/theme_color&lt;/item&gt; 加入values-21 文件夹 还要确保(目标 Android 版本)至少设置为 API 21 不要把它放在你的样式文件中&lt;item name="android:windowDrawsSystemBarBackgrounds"&gt;false&lt;/item&gt;否则系统栏着色将不起作用。 @JamsheedKamarudeen 使用 &lt;item name="android:windowLightNavigationBar"&gt;true&lt;/item&gt;【参考方案2】:

以下是如何以编程方式执行此操作:

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>

【讨论】:

这是一个奇怪的选项!我有一个应用程序可以用黑色按钮使导航栏变黑,从而无法看到主页/返回/最近的软按钮...【参考方案3】:

这里有一些改变导航栏颜色的方法。

通过 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 这并没有过时,请参阅我的更新答案。 如果我决定以编程方式更改颜色 - 我需要在每个 Activity/Fragment 中执行此操作吗?或者是否有某个地方我应该这样做?也许在扩展 Application 的课堂上? 您需要在每个Activity中都这样做,或者您可以为不同的Activity制作不同的样式。 使用tools:targetApi时无需覆盖styles.xml【参考方案4】:

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

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

【讨论】:

【参考方案5】:

对于使用 Kotlin 的人,您可以将其放在 MainActivity.kt 中:

window.navigationBarColor = ContextCompat.getColor(this@MainActivity, R.color.yourColor)

window 是:

val window: Window = this@MainActivity.window

或者您可以将其放入您的主题.xml 或样式.xml(需要 API 级别 21):

<item name='android:navigationBarColor'>@color/yourColor</item>

【讨论】:

【参考方案6】:
    创建黑色:&lt;color name="blackColorPrimary"&gt;#000001&lt;/color&gt; (not #000000) 写作风格:&lt;item name="android:navigationBarColor" tools:targetApi="lollipop"&gt;@color/blackColorPrimary&lt;/item&gt;

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

【讨论】:

如果你做的一切都是正确的,但它仍然不起作用,这对我有用。似乎在其他任何地方都没有提到 #000000 不起作用。【参考方案7】:

您也可以使用主题编辑器修改您的主题,点击:

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

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

【讨论】:

不错的提示!对我来说,它就在工具 -> 主题编辑器下。 现在主题编辑器从 3.3 开始就消失了。【参考方案8】:

您可以直接在styles.xml文件\app\src\main\res\values\styles.xml

中进行更改

这项工作适用于旧版本,我在 KitKat 中对其进行了更改并来到这里。

【讨论】:

以上是关于Android棒棒糖更改导航栏颜色的主要内容,如果未能解决你的问题,请参考以下文章

Android 更改导航栏颜色及隐藏导航栏

更改 Android 上的导航栏图标颜色

棒棒糖上完全透明的状态栏和导航栏

在棒棒糖之前更改状态栏背景颜色? [复制]

Chrome Mobile,更改系统导航栏(返回、主页、最近按钮)背景颜色?

当用户查看页面的特定部分时如何更改导航栏图标的颜色