我使用WindowManager添加了一个视图。
它正确显示了我想要做的事情,
但我有一个问题。 这就是问题所在。
我想要的是我添加的视图可以聚焦,(可以点击视图的内部按钮) 只有在点击视图时 在视图之外可以处理他们的工作。 (例如,如果有按钮,可以点击,按回按键时,顶部活动就消失了)
但是如果我添加一个标志 - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 然后我无法在添加的视图按钮上收到onClick方法。 但后退按钮工作正常。
否则,如果我删除标志 - 我可以收到onClick回调, 但现在后退按钮不起作用。
我有一个困境。 :(
谢谢。
答案 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);