アンドロイド:どのように私は、メニューボタンにリスナーを設定することができますか?
-
21-09-2019 - |
質問
私は電話でMenu
ボタンを押したときにカスタムアクションをしたい。
これは、ボタンの上にonClickListener(または類似)を設定し、その場合は可能です、どのように?
onCreateOptionsMenu
だけボタンが押された最初の時間と呼ばれている - 私はすでにこれを試してみた。
解決
ユーザーはメニューが表示されることを期待すると、
通常は、しかし、あなたはこれらの線に沿って何かを使用することができ、MENU
の動作を上書きすべきではありません。
/* (non-Javadoc)
* @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ( keyCode == KeyEvent.KEYCODE_MENU ) {
Log.d(TAG, "MENU pressed");
return true;
}
return super.onKeyDown(keyCode, event);
}
他のヒント
しかしonPrepareOptionsMenu(..)
はたびに呼び出されます。 :)
APPCOMPATのV.22用に更新。+
このフォーラムの中で述べたように、KeyDown
は、と呼ばれていませんKEYCODE_MENUボタン押します。
ソリューションは、このようにdispatchKeyEvent
を上書きすることです。
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
int action = event.getAction();
boolean isDown = action == KeyEvent.ACTION_DOWN;
if (keyCode == KeyEvent.KEYCODE_MENU) {
return isDown ? this.onKeyDown(keyCode, event) : this.onKeyUp(keyCode, event);
}
return super.dispatchKeyEvent(event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ( keyCode == KeyEvent.KEYCODE_MENU ) {
// do what you want to do here
return true;
}
return super.onKeyDown(keyCode, event);
}
、Googleの開発者は、このための修正をリリース(または多分それはバグではありません、それは今からこのように動作する)まで、それは動作します。
あなたは使用して、おそらくハック何か「OnMenuOpened」またはいくつかのように、私は実際にそれをお勧めしませんでした。メニューボタンは、だけなので、アプリケーション間の一貫性があり、メニューを表示するために使用されることを想定している。
所属していません StackOverflow