4

我使用 WindowManager 添加了一个视图。

它正确显示了我想做的事情,

但我有一个问题。这就是问题。

  • 后退键不影响在android组件下(如活动)

我想要的是我添加的视图可以聚焦,(可以单击视图的内部按钮)只有在单击视图时,视图外部才能处理它们的工作。(例如,如果有一个按钮,可以点击,当返回键按下时,顶部活动消失了)

但如果我添加一个标志 - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,那么我无法在添加的视图按钮上接收 onClick 方法。但后退按钮工作正常。

否则,如果我删除标志 - 我可以接收 onClick 回调,但现在后退按钮不起作用。

我有一个难题。:(

谢谢你。

4

3 回答 3

9

让您的视图覆盖

public boolean dispatchKeyEvent(KeyEvent event) 

按下后退时做某事。

于 2013-03-28T04:01:00.210 回答
0

覆盖视图的 dispatchKeyEvent

    @Override
    public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK)
{
    // handle back press
    // if (event.getAction() == KeyEvent.ACTION_DOWN)
    return true;
}
return super.dispatchKeyEvent(event);
}
于 2016-03-28T06:11:52.720 回答
0

你可以这样做:

通过 WindowManager 添加一个浮动窗口,例如在屏幕底部添加一个视图:

WindowManager windowManager = (WindowManager) getActivity().getApplicationContext().getSystemService(Context.WINDOW_SERVICE);

WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); 
layoutParams.width   = WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.height  = WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.type= WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
layoutParams.flags   =  WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
layoutParams.format  = PixelFormat.TRANSLUCENT;
layoutParams.gravity = Gravity.LEFT | Gravity.TOP;
layoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;

FrameLayout view = new FrameLayout(getActivity()) {
            @Override
            public boolean dispatchKeyEvent(KeyEvent event) {
                if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
                    // do you code
                    return true;
                }
                return super.dispatchKeyEvent(event);
            }
        };
windowManager.addView(view, layoutParams); 
于 2017-07-25T12:19:22.697 回答