2

onBackPressedイベントを消費する必要があるカスタムAndroidコンポーネントを作成しています(たとえば、カスタムViewGroup内にポップアップメニューが表示されている場合は、戻るボタンイベントが閉じて消費されます。それ以外の場合は無視されます)。それは可能ですか?ViewGroupサブクラス内からこのイベントをインターセプトできますか?

編集:Androidのドキュメントに示されているように、onKeyPreImeをオーバーライドしようとしました。メソッドは、ViewGroup内から呼び出されることはありません。

@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event)
{
     return true;
}

onKeyPreImeのドキュメントには、次のように記載されています。

ビュー階層に関連付けられた入力メソッドによって処理される前に、キーイベントを処理します。これは、IMEがキーイベントを消費する前に、特別な状況でキーイベントをインターセプトするために使用できます。典型的な例は、IMEがそれを認識してそれ自体を閉じるのではなく、BACKキーを処理してアプリケーションのUIを更新することです。

4

2 に答える 2

9

onKeyDownまたはonKeyPreImeが呼び出されない理由は、ViewGroupにフォーカスがないためです。

解決策は、ViewGroupサブクラスのコンストラクターでフォーカスを要求することでした。

this.setFocusable(true);
this.setFocusableInTouchMode(true);
this.requestFocus();
于 2012-08-16T20:11:20.837 に答える
2

onBackPressedはActivityに属し、views/viewgroupsはActivity内に配置されたものです。したがって、技術的には、これを実行することはできません。ただし、ある種のオブザーバー/観察可能なパターンを使用して、任意の種類の情報をビューに渡すことができます。

または、ビュークラス内でonKeyDownイベントを使用して、バックキーイベントコードを追跡してみてください。

于 2012-08-13T09:08:32.463 に答える