将我的工具栏图像显示为状态栏的背景,从而影响 android 中的导航栏

Neo*_*Neo 4 android android-layout android-toolbar android-statusbar android-navigation-bar

我希望我的工具栏占据状态栏的空间,并将用于它的图像作为状态栏的背景,我在我的活动中使用此代码成功地做到了这一点

    //    for using status bar space
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    }
Run Code Online (Sandbox Code Playgroud)

问题是这段代码使我的活动布局即使是带有导航栏的空间也全屏显示,那么如何解决这个问题?

这是屏幕图像 在此处输入图片说明

ljk*_*ljk 5

这是我用于在 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>
Run Code Online (Sandbox Code Playgroud)

如果你愿意,你可以查看 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);
    }
Run Code Online (Sandbox Code Playgroud)

这些是您需要的标志,不要View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION在设置标志时添加 ,因为它隐藏了您需要显示的导航栏。

您需要调用该方法,否则将无法正确创建状态栏。

所以试试这个,让我知道它是否对你有用。

编辑:不要忘记删除FLAG_LAYOUT_NO_LIMITS标志,以防它们处于活动状态,因为它会产生问题。这是我对 android 10 进行的测试。

在此处输入图片说明