这是我用于在 android 10 和其他版本上进行测试的解决方案,因此请检查这是否有帮助。
在您styles.xml
创建自定义主题时,您可以将父主题设置为您的应用程序主题,如果它有任何 NoActionBar(AppCompat/DayNight/material 等)设置为父级或直接设置一个(因为没有 NoActionBar,默认的将获得在顶部生成),主要要求是这三行:
<style name="CustomTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">false</item>
<item name="android:statusBarColor">#00000000</item>
</style>
如果您愿意,可以查看 statusBarColor 的文档,基本上会告诉您需要做什么。
状态栏的颜色。如果颜色不透明,请考虑设置 {@link android.view.View#SYSTEM_UI_FLAG_LAYOUT_STABLE} 和 {@link android.view.View#SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}。要使其生效,窗口必须使用 {@link android.R.attr#windowDrawsSystemBarBackgrounds} 绘制系统栏背景,并且不得使用 {@link android.R.attr#windowTranslucentStatus 请求状态栏为半透明}。对应于 {@link android.view.Window#setStatusBarColor(int)}。
因此,只需根据您的要求设置透明颜色或您希望设置为状态栏的任何颜色。并将此主题设置为您想要的活动。
现在在活动中创建这个方法,如下所示:
private void showCustomUI() {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
这些是您需要的标志,在设置标志时不要添加 View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
,因为它隐藏了您需要显示的导航栏。
您需要调用该方法,否则将无法正确创建状态栏。
所以试试这个,让我知道它是否对你有用。
编辑:不要忘记删除FLAG_LAYOUT_NO_LIMITS
标志以防它们处于活动状态,因为它会产生问题。这是我对 android 10 进行的测试。
