Change navigation bar icon color on Android
I need to change the navigation bar on android. Just like the 'light' variant on the right in the image below
as given in https://www.google.co.in/design/spec/layout/structure.html#structure-system-bars.
Now, I can change the background of the navigation bar by using
"android:navigationBarColor"
I get
but there seems to be no way changing the button color to dark.
Anyone has the idea how to do it.
PS:
While researching in AOSP for the classes responsible for NavigationButtons, I could find NavigationBarView.java, PhoneStatusBar.java, PhoneWindowManager.java, navigation_bar.xml.
I was thinking of get reference of the drawable for the navigationbar buttons like ic_sysbar_recent
and change their tint. But these are private and I cannot get their reference.
Also, I have seen people using xposed library to do it L-NAVBAR, but I don't want to use any external library.
If you are using API 27 (Android 8.1) or greater, you can achieve it with this in your theme:
<item name="android:windowLightNavigationBar">true</item>
You can create a folder called values-v27 and place a version of your theme (in styles.xml) with a light navigation bar and the above code to get dark navigation bar buttons.
This way, users with Android 8.0 or lower will get the standard (black) navigation bar while users with Android 8.1 or greater will get a white navbar with dark buttons.
Starting from Android O it gets really straightforward, as you could just:
View.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
For this to take effect, the window must request FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS but not FLAG_TRANSLUCENT_NAVIGATION.
Documentation: https://developer.android.com/reference/android/view/View.html#SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
You can adjust
windowLightNavigationBar = true/false
and
navigationBarColor = @color/yourColorId
so there're 4 cases, I've made an experiment:
In short, you don't want
windowLightNavigationBar= false
while navigationBarColor=White
or
windowLightNavigationBar= true
while navigationBarColor=Black
(this will be wired on SOME devices)