更改导航栏颜色,Android

7

我如何将旧版设备(例如状态栏或操作栏的颜色)中导航栏的颜色/透明度从黑色更改为通用颜色?

是否可以使用AppCompat实现,还是只有在SDK 21上才能实现?


1
点击这个链接查看。 - Hana Bzh
这是我所说的导航栏。(http://developer.xamarin.com/guides/android/user_interface/navigation_bar/Images/19_-_NavBar.png) - Marco Gagino
3个回答

10
你可以在 AppCompat 主题中设置属性 navigationBarColor,或在原生 v21 主题中设置 android:navigationBarColor
<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
    ...
    <item name="navigationBarColor">#123456</item>
</style>

请注意,这在早期的Android系统(4.4或更早版本)上不起作用,因为此功能需要系统支持,而这并非该系统的情况。

https://developer.android.com/training/material/theme.html#StatusBar


谢谢,但我正在寻找适用于早期设备(minSDK 11)的东西。 - Marco Gagino
据我所知,那是不可能的。 - Floern
对于使用appcompat的Lollipop设备,是否至少可以不将minSDK设置为21? - Marco Gagino
4
我收到了“未找到与给定名称匹配的资源:attr 'navigationBarColor'”的错误信息。 - Matthew Mitchell
在appCompat中没有navigationBarColor,你必须在values-21中使用本地的v21 android:navigationBarColor - ThanosFisherman

5

还有一种编程方式:

window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(getResources().getColor(R.color.DarkOrange));
window.setNavigationBarColor(getResources().getColor(R.color.red));

此外,要更改状态栏颜色,请添加以下行:

window.setStatusBarColor(getResources().getColor(R.color.green));

4
非常感谢,window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 是我所缺少的内容。 - jds17

3

样式-v21

<resources>

<style name="Theme.DesignDemo" parent="Base.Theme.DesignDemo">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:windowTranslucentNavigation">true</item>//translucent
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:navigationBarColor">@android:color/transparent</item>
</style>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接