【问题标题】:how change navigation bar color?如何改变导航栏颜色?
【发布时间】:2018-06-06 04:49:00
【问题描述】:

我想要一个半透明的状态栏和其他颜色不透明的导航栏,如蓝色或白色

我的代码

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:navigationBarColor">@color/colorPrimary</item>
    </style>

活动

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            Window w = getWindow();
            w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        } 

状态栏半透明好但是导航栏没有变色。为什么?

navigation bar

【问题讨论】:

  • 你的应用程序 api 级别是多少?
  • 仅限 API 级别 24

标签: java android


【解决方案1】:

改变导航颜色的方法:

values-v21/style.xml

<item name="android:navigationBarColor">@color/blue_color</item>

以编程方式:

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.primary));
}

【讨论】:

  • 这有效,但如果添加此代码以更改状态栏半透明 w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);未更改颜色导航栏
  • 表示如果你设置状态栏半透明比你的导航栏颜色不变?
  • if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 窗口 w = getWindow(); w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);在 setContentView() 之前把它放在你活动的 onCreate 方法中希望这对你有用
【解决方案2】:

查看我之前的Answer,它肯定会帮助您获得结果。

您可以通过两种方式实现此目的 - 使用 styleActivity

values-v21/style.xml

<item name="android:navigationBarColor">@color/navigationbar_color</item>

在 Activity 中使用 Compat 库-

if (Build.VERSION.SDK_INT >= 21) {
    getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.primary));
}

【讨论】:

  • 此解决方案在 splsh 屏幕显示时适用于我。但是,我想回到默认的设备导航栏颜色,因为许多设备使用不同的颜色(主要在白色和黑色之间)。有什么解决办法吗?非常感谢!
【解决方案3】:

根据我对https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html 中“FLAG_LAYOUT_NO_LIMITS”的理解 [窗口标志:允许窗口延伸到屏幕之外] 这种标志的使用将状态栏和导航栏。 实际上使用您的 style.xml 文件并添加行

<color name="myWindowBackground">#D7DEB5</color> 

要更改白色窗口背景,可以同时注意状态栏符号和导航栏符号,但不要注意它们的栏。此外使用以下代码:

int statusBarColor = w.getStatusBarColor();
String hexStatusBarColor = String.format("#%08X", (0xFFFFFFFF & statusBarColor));
int navigationBarColor = w.getNavigationBarColor();
String hexNavigationBarColor = String.format("#%08X", (0xFFFFFFFF & navigationBarColor));
Log.d("FLAGS", "statusBarColor: " + hexStatusBarColor + " -- navigationBarColor: " + hexNavigationBarColor);

您会看到 statusBarColor(“#00000000”完全透明)和 navigationBarColor 设置正确,但由于窗口外未显示。

现在不使用标志“FLAG_LAYOUT_NO_LIMITS”,您将获得一个透明的状态栏(与 windowBackground 相同的颜色)以及所需的导航栏颜色,但目前不确定代码还试图通过使用此标志获得什么.

【讨论】:

  • 这是初学者的最佳答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 2023-04-10
相关资源
最近更新 更多