使用WindowManager添加View,但可以按返回键

时间:2012-10-17 05:30:58

标签: android-windowmanager

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

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

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

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

我想要的是我添加的视图可以聚焦,(可以点击视图的内部按钮) 只有在点击视图时 在视图之外可以处理他们的工作。 (例如,如果有按钮,可以点击,按回按键时,顶部活动就消失了)

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

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

我有一个困境。 :(

谢谢。

3 个答案:

答案 0 :(得分:8)

让视图覆盖

public boolean dispatchKeyEvent(KeyEvent event) 

按下后退时做某事。

答案 1 :(得分: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);
}

答案 2 :(得分:0)

你可以这样做:

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

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);