0

私はアンドロイド用のアプリを作っています。ユーザーがデバイスのハードウェア メニュー ボタンをクリックしたときに、アクティビティに関連するオプションを含むカスタム ポップアップ メニューを開きたいと考えています。Android のドキュメントによると、コンテキスト メニューとオプション メニューしか作成できず、ハードウェア メニュー ボタンの機能にアクセスする方法はありません。これを行う方法?

4

2 に答える 2

1

新しい Android デバイス (3.0 以降を実行) には、ハードウェア メニュー ボタン ( source )が必要なくなりました。このチュートリアルに従ってメニューを作成できます。オプション メニューを作成すると、デバイスにハードウェア メニュー ボタンがある場合、アプリはユーザーがハードウェア メニュー ボタンを使用してメニューを開くことができるようにします。そうでない場合は、アクション バーにメニュー ボタンが表示されます。(ソース)。

何らかの理由でメニュー ボタンが押されたことを検出する必要がある場合onKeyUp(int, KeyEvent)は、Activity.

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        // do stuff
        return true;
    } else {
        return super.onKeyUp(keyCode, event);
    }
}

コード内からメニューを開く必要がある場合は、Activity.openOptionsMenu()メソッドを呼び出すことができます。

于 2013-05-07T17:25:45.560 に答える
0

私の答えは完全にhttp://developer.android.com/guide/topics/ui/menus.htmlに基づいています

これを行う方法に関する完全な情報、説明、および詳細な知識については、そのページをお読みください。

XML を作成します。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/new_game"
          android:icon="@drawable/ic_new_game"
          android:title="@string/new_game"
          android:showAsAction="ifRoom"/>
    <item android:id="@+id/help"
          android:icon="@drawable/ic_help"
          android:title="@string/help" />
</menu>

次のコードを使用して表示します。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.game_menu, menu);
    return true;
}

クリックを処理するには、次のコードを使用します。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case R.id.new_game:
            newGame();
            return true;
        case R.id.help:
            showHelp();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
于 2013-05-07T18:22:31.880 に答える