我需要更改android上的导航栏。就像'灯光一样。 {* 3}}下图中右侧的变体
如中所述。
现在,我可以使用
"android:navigationBarColor"
我得到了
https://www.google.co.in/design/spec/layout/structure.html#structure-system-bars
但似乎无法将按钮颜色更改为黑暗。
任何人都知道如何做到这一点。
PS:
在AOSP中研究负责NavigationButtons的类时,我可以找到,NavigationBarView.java,PhoneStatusBar.java,PhoneWindowManager.java。
我正在考虑获取像ic_sysbar_recent
这样的导航栏按钮的drawable引用并更改它们的色调。但这些是私人的,我无法得到他们的参考。
另外,我看到有人使用xposed库来navigation_bar.xml,但我不想使用任何外部库。
答案 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/false
和
navigationBarColor = @color/yourColorId
所以有 4 种情况,我做了一个实验:
简而言之,你不想
windowLightNavigationBar= false
而 navigationBarColor=White
或
windowLightNavigationBar= true
而 navigationBarColor=Black
(这将在某些设备上连接)
答案 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