私はWindowManagerでカスタムビューを追加しましたが、すべてが正しいです。 ちょうど1つの問題:「BACK」を押したようなキーイベントをどこで捕まえることができません。 私のカスタムビューでは、 'View.dispatchKeyEvent()'メソッドのイベントの一部が捕捉されましたが、 'BACK'や 'HOME'は含まれませんでした。 アドバイスはありますか? ありがとう!WindowManagerでビューを追加したときにkeyeventsを処理する方法は?
私のコードは、ちょうどこのようなものです:あなたのビューで
// get WindowManager
WindowManager windowManager = (WindowManager) getContext()
.getSystemService(Context.WINDOW_SERVICE);
// set LayoutParams
WindowManager.LayoutParams wmparams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT);
wmparams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
wmparams.format = PixelFormat.TRANSLUCENT;
wmparams.windowAnimations = R.style.fade;
// add this view to screen
windowManager.addView(this, wmparams);
this.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// cannot get 'BACK' pressed event here
return false;
}
});
ソレブド。このViewのdispatchKeyEvent()メソッドでイベントを捕捉するだけです。 – akdd
あなたのコードを表示できますか – Anthone
@Anthone申し訳ありませんが、それは長すぎます、私は今コードを持っていません。しかし、単純です。単にdispatchKeyEvent()メソッドをオーバーライドし、super.dispatchKeyEvent()を呼び出す前にコードを記述してください。 – akdd