系统ui模式改变后如何更改屏幕叠加(全屏,隐藏导航)?

时间:2016-06-15 09:42:59

标签: android overlay fullscreen

我创建叠加层:

mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    /*The parent view (actually the root view) the will be added in front of all the windows on the screen*/
    mOverlayView = (RelativeLayout) inflater.inflate(R.layout.overlay_control, null);

        mWindowManager.getDefaultDisplay().getSize(size);
        mWindowSize = new Size(size.x, size.y);

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
                    WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH |
                    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS |
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            PixelFormat.TRANSLUCENT);
    params.gravity = Gravity.TOP | Gravity.LEFT;
    mWindowManager.addView(mOverlayView, params);

如果系统UI可见性发生变化,我需要移动叠加层。有可能检测到它(documentation),但它不适用于叠加。所以我只需要回调来检测设备的模式是否发生了变化。

1 个答案:

答案 0 :(得分:1)

我找到了办法:

在Android中有OnSystemUiVisibilityChangeListener,但如果没有match_parent宽度或高度值的视图,则无效。

所以我创建了这样的叠加层并使其高度为1像素,宽度为match_parent并向其添加OnSystemUiVisibilityChangeListener