Android type_system_overlay 没有覆盖整个屏幕

Android type_system_overlay not covering entire screen

我已经为这个问题苦思了一个星期了。各种 google 搜索揭示了可能的解决方案,但没有任何效果。

我会 post 一个 link 到我的应用程序,但我确信这是不允许的。 简单的应用程序:按下一个按钮,它会激活一个半透明的彩色覆盖层。

问题:

当覆盖被激活时,如果导航栏是透明的,它不会cover/go在导航栏后面。

示例:您可以看到导航栏未被覆盖。透明的蓝色是覆盖层。

在 main activity super 和设置内容视图之后:

Intent i = new Intent(getApplicationContext(), TintOverlayService.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);

TintOverlayService.class

    LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
    windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
    mTopView = (LinearLayout) li.inflate(R.layout.red_overlay, null, false);
    mTopView.setBackgroundColor(Color.parseColor(colorCode.replace("#", tintValue)));

   WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
            WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
            PixelFormat.TRANSLUCENT);    

Color.parseColor(colorCode.replace("#", tintValue)) 仅应用用户选择的颜色和不透明度级别。

XML 用于 red_overlay 布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#40370000"
    android:theme="@android:style/Theme.Holo.NoActionBar.TranslucentDecor"
    android:fitsSystemWindows="true"
    >
</LinearLayout>

我尝试了各种 WindowManager.LayoutParams、布局、自定义主题、视图标志、沉浸式视图。我现在头疼得不知所措。

非常感谢任何帮助。

我所要做的就是在参数中添加两个标志:

WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;

int LayoutParamFlags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
                    | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
                    | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.MATCH_PARENT,
                    densityDpi * 6,
                    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                    LayoutParamFlags,
                    PixelFormat.TRANSLUCENT);