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

Gau*_*sth 35 android material-design

我需要更改android上的导航栏.就像下图中右侧的"浅色"变体一样 https://www.google.co.in/design/spec/layout/structure.html#structure-system-bars中所述.

现在,我可以使用更改导航栏的背景

"android:navigationBarColor"

我明白了

在此输入图像描述

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

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

PS:

在AOSP中研究负责NavigationButtons的类时,我可以找到NavigationBarView.java,PhoneStatusBar.java,PhoneWindowManager.java,navigation_bar.xml.

我想要获得导航栏按钮的drawable参考,ic_sysbar_recent并改变他们的色调.但这些是私人的,我无法得到他们的参考.

另外,我看到人们使用xposed库来做L-NAVBAR,但我不想使用任何外部库.

小智 25

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

<item name="android:windowLightNavigationBar">true</item>
Run Code Online (Sandbox Code Playgroud)

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

  • 应该注意的是,你还需要设置`<item name ="android:navigationBarColor"> @ color/background_material_light </ item>`. (12认同)
  • 是的,我只是想更清楚地说明您需要使用_some_ color来指定该属性,因为我花了几分钟来弄清楚为什么导航栏完全是黑色的。(我认为`windowLightNavigationBar`会为您更改按钮的颜色。) (3认同)
  • @SUPERCILEX 您可以使用任何您喜欢的颜色,而不仅仅是 background_material_light。只要确保使用浅色,因为按钮会变暗。 (2认同)
  • 27岁以下怎么样? (2认同)
  • @MJStudio不可能 (2认同)

lid*_*kxx 13

从Android O开始,它非常简单,你可以:

View.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
Run Code Online (Sandbox Code Playgroud)

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

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

  • 值得注意的是,这是(至少对我而言)使导航栏按钮变暗的唯一方法(在 Pie、API 28 (Pixel 2 XL) 上测试)。尽管文档 (https://developer.android.com/reference/android/R.attr#windowLightNavigationBar) 说 `windowLightNavigationBar` XML 属性对应于 `View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR`,但它们肯定不对应。我无法使用提到的 XML 属性使导航栏按钮变暗,但我可以使用这段代码。 (4认同)
  • 从代码中执行此操作在所有情况下都有效。XML 属性似乎仅在您不使用系统 UI 标志(例如“SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION”或“SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN”)时才起作用。 (2认同)

Wes*_*ely 6

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

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

windowLightNavigationBar= false简而言之,你不想 navigationBarColor=White

或者

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

在此输入图像描述