14

Menu電話のボタンを押したときにカスタムアクションを実行したい。

ボタンにonClickListener(または同様のもの)を設定することは可能ですか?設定する場合、どのように行いますか?

onCreateOptionsMenuボタンが最初に押されたときにのみ呼び出されます-私はすでにこれを試しました。

4

4 に答える 4

30

通常、ユーザーはメニューが表示されることを期待しているため、動作をオーバーライドするべきではありませんが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);
}
于 2010-03-19T15:37:06.397 に答える
19

しかしonPrepareOptionsMenu(..)、毎回呼び出されます。:)

于 2010-03-19T15:27:15.630 に答える
3

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 の開発者がこれに対する修正をリリースするまで機能します (または、バグではなく、今後このように機能する可能性があります)。

于 2015-04-29T09:51:46.583 に答える
1

「OnMenuOpened」などを使用して何かをハックすることもできますが、実際にはお勧めしません。メニューボタンはメニューを表示するためにのみ使用されることになっているため、アプリケーション間で一貫性があります。

于 2010-03-19T15:26:31.187 に答える