叠加导航栏&全屏活动的状态栏

时间:2016-01-24 13:54:09

标签: android navigationbar lockscreen

我正在创建一个锁屏应用程序。我一直在寻找和尝试一些技巧,但仍然找不到最好的方法。我之前使用的方法是使用TYPE_SYSTEM_ERROR。它运作良好。它会阻止导航和status bar进行任何触摸。它还会在我的应用程序后面运行任何其他应用程序,包括关闭电源选项对话框。

不幸的是我认为这很糟糕,因为当应用程序冻结或没有响应时,用户无法做任何事情,只能强行重启他/她的手机。

我一直在寻找并分析Play商店中现有的一些锁屏应用。他们使用不同的方式锁定手机,但我找到了一个我认为可以遵循的应用程序。它使导航和状态栏覆盖应用程序。导航和状态栏仍然可以点击,但它都在锁定屏幕后面打开。当我尝试打开关机对话框时,NavigationBar仍覆盖锁定屏幕。

我改变了我的应用程序以遵循这种方法。我可以让酒吧覆盖我的锁定屏幕,但我仍然无法:

<击> 1。让其他应用程序在我的锁定屏幕后面运行(锁定屏幕总是在顶部)
2.当出现关机对话框和用户移动到家时,NavigationBar会保持叠加状态。在我的情况下,NavigationBar推高了屏幕,我的屏幕看起来很丑(一些组件移动到错误的位置)和Dialog被解除后的,它不会移回原来的位置。 它已修复,但当我触摸主页按钮并仍在搜索修复此问题时,我发现了类似的问题。

以下是我的代码片段(已更新):

   params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.TYPE_PHONE, 
                    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                    PixelFormat.TRANSLUCENT);
            params.gravity = Gravity.TOP;

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            } else {
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            }
    mOverlay = (RelativeLayout) inflater
                    .inflate(R.layout.main, (ViewGroup) null);

    mOverlay.setFitsSystemWindows(false);
            getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
            mWindowManager = (WindowManager) context
                    .getSystemService(Context.WINDOW_SERVICE);
            mWindowManager.addView(mOverlay, params);

这里是我要关注的PlayStore应用的截图:

enter image description here

0 个答案:

没有答案