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

时间:2015-10-13 13:40:36

标签: android material-design

我需要更改android上的导航栏。就像'灯光一样。 {* 3}}下图中右侧的变体 如 中所述。

现在,我可以使用

更改导航栏的背景

"android:navigationBarColor"

我得到了

https://www.google.co.in/design/spec/layout/structure.html#structure-system-bars

但似乎无法将按钮颜色更改为黑暗。

任何人都知道如何做到这一点。

PS:

在AOSP中研究负责NavigationButtons的类时,我可以找到enter image description hereNavigationBarView.javaPhoneStatusBar.javaPhoneWindowManager.java

我正在考虑获取像ic_sysbar_recent这样的导航栏按钮的drawable引用并更改它们的色调。但这些是私人的,我无法得到他们的参考。

另外,我看到有人使用xposed库来navigation_bar.xml,但我不想使用任何外部库。

6 个答案:

答案 0 :(得分:22)

如果您使用的是API 27(Android 8.1)或更高版本,则可以在主题中实现此目的:

<item name="android:windowLightNavigationBar">true</item>

您可以创建一个名为 values-v27 的文件夹,并使用一个光源导航栏和上面的代码放置一个主题版本(在styles.xml中),以获得深色导航栏按钮。 /> 这样,使用Android 8.0或更低版本的用户将获得标准(黑色)导航栏,而使用Android 8.1或更高版本的用户将获得带有暗按钮的白色导航栏。

答案 1 :(得分:11)

从Android O开始,它非常简单,就像你可以这样:

View.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
  

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

文档:https://developer.android.com/reference/android/view/View.html#SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR

答案 2 :(得分:1)

你可以调整 windowLightNavigationBar = true/falsenavigationBarColor = @color/yourColorId

所以有 4 种情况,我做了一个实验:

简而言之,你不想 windowLightNavigationBar= falsenavigationBarColor=White

windowLightNavigationBar= truenavigationBarColor=Black (这将在某些设备上连接)

enter image description here

答案 3 :(得分:0)

据我所知,这些图标是com.android.systemui的一部分,这就是为什么你需要root + patch或者注入(比如Xposed)来改变它们。

从不同的角度考虑它。一种可能性可能是将该活动的主题设置为亮或暗,然后以编程方式设置条的背景颜色。其中一个主题应该有黑暗的图标。

另一种选择可能是完全隐藏吧 https://developer.android.com/training/system-ui/navigation.html

然后使用您自己的按钮在底部创建第二个工具栏。

答案 4 :(得分:0)

如果您的目标用户的Api级别为27或更高,请在您的AppTheme中使用此行

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">       
    <item name="android:windowBackground">@color/your_color</item>                
</style>

但是,如果您的目标用户api级别低于27或更高,则可以执行以下操作

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">       
    <item name="android:windowBackground">@color/your_color</item>
    <item name="android:windowLightNavigationBar" tools:targetApi="27">true</item>            
</style>

这样做,API级别为27或更高的用户会更改BottomNav图标的颜色,但是API级别小于27的用户将无法使用这些功能

答案 5 :(得分:0)

只需在应用程序运行时添加此行即可

val navView: BottomNavigationView = findViewById(R.id.nav_view)
    navView.itemIconTintList = null