Android覆盖窗口中的后退按钮回调
我正在我的应用程序中显示一个来自服务的Android覆盖窗口中的后退按钮回调,android,overlay,keyevent,Android,Overlay,Keyevent,我正在我的应用程序中显示一个来自服务的覆盖窗口。当按下后退按钮时,我想隐藏窗口。因此,要获取back按钮事件,我需要执行以下代码 class MyView extends MyLayout{ public MyView(Context context){ super(context); LayoutInflater.from(context).inflater(R.layout.my_view,this); } } Class MyLayout
覆盖窗口
。当按下后退按钮时,我想隐藏窗口。因此,要获取back按钮事件
,我需要执行以下代码
class MyView extends MyLayout{
public MyView(Context context){
super(context);
LayoutInflater.from(context).inflater(R.layout.my_view,this);
}
}
Class MyLayout extends FrameLayout{
public MyLayout(Context context){
super(context);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
Log.e("key event", "" + event.getKeyCode());
return super.dispatchKeyEvent(event);
}
}
//service code
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
| WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION | WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
PixelFormat.TRANSLUCENT);
final MyView myview = new MyView(this);
windowManager.addView(myview,param);
但按下
后退按钮时,从未调用dispatchKeyEvent
方法。我在谷歌上搜索,发现这是一种捕捉后退按钮事件的方法。不知怎么的,我的案子不管用。我缺少什么?如果您只想捕获按下的后退按钮,请使用:
@override
public void onBackPressed(){
// Do what you need done here
// ... or pass super.onBackPressed();
}
如果您只想捕获按下的后退按钮
事件,请使用:
@override
public void onBackPressed(){
// Do what you need done here
// ... or pass super.onBackPressed();
}
真正的问题是窗口参数
。我只需要WindowManager.LayoutParams.FLAG\u WATCH\u OUTSIDE\u TOUCH flags
,它阻止其他应用程序获取关键事件。所以正确的代码如下
//服务代码
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION | WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
PixelFormat.TRANSLUCENT);
真正的问题是窗口参数
。我只需要WindowManager.LayoutParams.FLAG\u WATCH\u OUTSIDE\u TOUCH flags
,它阻止其他应用程序获取关键事件。所以正确的代码如下
//服务代码
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION | WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
PixelFormat.TRANSLUCENT);