怎样让WindowManager加上的view跟周围没被view挡住的控件都获得焦点

2025-04-27 08:54:46
推荐回答(1个)
回答1:

  给View设置 wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;

FLAG_WATCH_OUTSIDE_TOUCH 这个是可以获得一次外部焦点,当获取外部焦点的时候 把View再改成

view.setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
                        Log.v("====", "onTouch ACTION_OUTSIDE");
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                if (view.getParent() != null) {
                                    wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;//不允许获取焦点
                                    wm.updateViewLayout(view, wmParams);
                                }
                            }
                        });
                    }
                    return false;
                }
            });

这样的话就可以获得外部的事件