Menu
電話のボタンを押したときにカスタムアクションを実行したい。
ボタンにonClickListener(または同様のもの)を設定することは可能ですか?設定する場合、どのように行いますか?
onCreateOptionsMenu
ボタンが最初に押されたときにのみ呼び出されます-私はすでにこれを試しました。
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」などを使用して何かをハックすることもできますが、実際にはお勧めしません。メニューボタンはメニューを表示するためにのみ使用されることになっているため、アプリケーション間で一貫性があります。