gpt4 book ai didi

android - SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR 不适用于 API 28

转载 作者:行者123 更新时间:2023-12-03 00:24:58 26 4
gpt4 key购买 nike

我遇到的问题是 SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR 无法正常工作,但 SYSTEM_UI_FLAG_LIGHT_STATUS_BAR 可以正常工作。我目前正在使用 Android API 28。

那么发生了什么?在 API 23 及更低版本上,我按预期获得半透明状态栏和导航栏。在 API 23 和 API API 26 之间,我得到了预期的半透明导航栏和灯光模式状态栏。但在 API 27 及更高版本上,我得到了灯光模式状态栏,但没有灯光模式导航栏。它只是普通的黑色,没有任何变化。

这是我的 MainActivity,其中包含基于 Android API 级别启用半透明或灯光模式状态栏和导航栏的代码(请注意,我的评论描述了哪些有效,哪些无效):

View decorView = getWindow().getDecorView();
Window win = getWindow();

//Setup Status Bar and Nav Bar white if supported
if(Build.VERSION.SDK_INT >= 27) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);// <- works not
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); // <- works
}
else if (Build.VERSION.SDK_INT >= 23 && Build.VERSION.SDK_INT < 27) {
//this here works
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
win.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
} else {
//this here works
win.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
win.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}

这是我的 style.xml:

<resources xmlns:tools="http://schemas.android.com/tools">

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorWhite</item>
<item name="colorPrimaryDark">@color/colorWhite</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorPrimary">@color/colorBlack</item>
<item name="android:fitsSystemWindows">true</item>
</style>

</resources>

你们能告诉我缺少什么吗?我对导航栏使用与状态栏完全相同的代码,但只有状态栏获得浅色模式。感谢您的每一次帮助

最佳答案

经过几个小时的测试,我发现了!首先,您必须在 xml 中将导航栏设置为白色,并在 style.xml 中将目标 API 设置为高于 26:

 <item name="android:navigationBarColor" tools:targetApi="27">@android:color/white</item>

之后,您必须在主要 Activity 中导入此标志:

import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;

在您的代码中,您必须将标志全部设置在一起,如下所示:

if(Build.VERSION.SDK_INT >= 27) {
decorView.setSystemUiVisibility(FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS |
View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR |
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}

现在,如果我高于 API 26,我会获得轻型导航和状态栏!

关于android - SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR 不适用于 API 28,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55973728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com