轻型导航栏Android

时间:2016-04-07 15:09:23

标签: android material-design navigationbar

我想更改(切换)导航栏颜色

黑色背景和白色图标 - > 白色背景和黑色图标。

Light Navigation Bar

我知道这是可能的,因为我在uCropYalantis图书馆看到了cfdumpoutput

我已经知道要更改我们在 Android 23 上提供的android:windowLightStatusBar中使用style.xml所需的状态栏颜色。

可能有这种类型的属性吗?

7 个答案:

答案 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));