NavigationBar 按钮在从服务绘制的布局上没有响应

NavigationBar buttons not responding on a layout drawn from Service

我正在尝试实现一种 AlertWindow 的东西,我正在使用 WindowsManager 的实例从 Service 添加一个 ViewView 可见且可访问。但是屏幕 NavigationBar 上的 back/home 按钮似乎没有响应。我是 Android.

的新手

这是我的代码片段:

        mLayout = new LinearLayout(this);
        mLayout.setLayoutParams(new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT));

        View view = LayoutInflater.from(this).inflate(R.layout.Mainactivity,
                mLayout, true);
        mTvErrorMsg = (TextView)view.findViewById(R.id.tv_error_msg);
        mChkBoxAppState = (CheckBox)view.findViewById(R.id.chkbox_app_state);
        mCancelBtn = (Button)view.findViewById(R.id.btn_action);

        mEdtPin.addTextChangedListener(this);

        try {
            mWindowManager.addView(mLayout, wmlp);
        } catch (RuntimeException e) {
            SymLog.e(TAG, "Failed to add lock page.", e);

        }

您确定您定义的布局参数正确吗?

new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT)

这意味着您拥有的 LinearLayout 将占用整个父级 width/height。也许将视图更改为 WRAP_CONTENT,这样它只会占用所需的空间。

这可能需要更多的工作,因为这取决于您尝试展示的内容。

添加以下 LayoutParameters 解决了我的问题:

wmlp.flags = WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
wmlp.flags &= ~(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
wmlp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT |  WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
wmlp.format = -1;
wmlp.token = null;
wmlp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE;