我想更改(切换)导航栏的颜色:
黑色背景和白色图标 - > 白色背景和黑色图标。
我知道这是可能的,因为我在uCrop的Yalantis图书馆看到了:
我已经知道要更改我们在 Android 23 上提供的android:windowLightStatusBar
中使用style.xml
所需的状态栏颜色。
可能有这种类型的属性吗?
答案 0 :(得分:3)
从Android O开始,这应该非常简单。 SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
答案 1 :(得分:1)
在您的应用BaseTheme
<item name="android:navigationBarColor">@color/yourNavigationColor</item>
答案 2 :(得分:1)
您可以在v26 / styles.xml中控制导航栏背景颜色:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="AppTheme.Base">
...
<item name="android:navigationBarColor">@android:color/white</item>
</style>
</resources>
要使导航栏中按钮的颜色与浅色背景匹配,您需要在活动性的DecorView上设置2个标记。
在您的活动中:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS |
SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
}
要使此方法生效,该窗口必须请求FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,而不是FLAG_TRANSLUCENT_NAVIGATION。
请参阅:https://developer.android.com/.../View#SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
答案 3 :(得分:0)
在Oreo +中使用:
<item name="android:windowLightNavigationBar">true</item>
(在奥利奥之前,不支持浅色。)
答案 4 :(得分:0)
对于API 27+,您可以通过样式来实现:
<!-- added in API 27 -->
<item name="android:windowLightNavigationBar">true</item>
<!-- required to contrast the dark buttons -->
<item name="android:navigationBarColor">@android:color/white</item>
<!-- optional -->
<item name="android:navigationBarDividerColor">@android:color/black</item>
在API 27中引入了XML属性的同时,通过SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
在API 26中更早地引入了对轻型导航栏的支持。
因此,要针对最早支持它的设备,您将通过代码而不是XML样式来实现。
答案 5 :(得分:0)
我在所有“活动”中都使用此kotlin扩展功能。只需将此函数复制到项目中的某些位置,并在需要时更改statusBar颜色或navBar颜色或更改浅色/深色statusBar或更改浅色/深色navBar时随时使用它们。
fun AppCompatActivity.setStatusBarColor(color: Int)
{
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.setStatusBarColor(color)
}
fun AppCompatActivity.setStatusLightDark(is_light: Boolean)
{
if (Build.VERSION.SDK_INT < 23)
{
return
}
var flags = window.decorView.systemUiVisibility
if (is_light)
{
flags = flags and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv()
}
else
{
flags = flags or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
}
window.decorView.systemUiVisibility = flags
}
fun AppCompatActivity.setNavBarColor(color: Int)
{
window.setNavigationBarColor(color)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
{
window.setNavigationBarDividerColor(color)
}
}
fun AppCompatActivity.setNavBarLightDark(is_light: Boolean)
{
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O)
{
return
}
var flags = window.decorView.systemUiVisibility
if (is_light)
{
flags = flags and View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR.inv()
}
else
{
flags = flags or View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
}
window.decorView.systemUiVisibility = flags
}
用法:
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
val color_status_bar = ContextCompat.getColor(this,R.color.yellow)
val color_nav_bar = ContextCompat.getColor(this,R.color.red)
this.setStatusBarColor(color_status_bar)
this.setStatusLightDark(false)
this.setNavBarColor(color_nav_bar)
this.setNavBarLightDark(true)
.....
}
答案 6 :(得分:-16)
该栏名为snackbar试试这个:
snackBarView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.BLACK));