アクションを追加して処理する

アプリバーを使用すると、ユーザー アクションのボタンを追加できます。この機能を使用すると 現在のコンテキストで最も重要なアクションがアプリの上部に表示されます。 たとえば、写真閲覧アプリでは、共有作成 ユーザーがフォトロールを見ているときに、アルバムの上部にボタンが表示されます。日時 ユーザーが個々の写真を確認すると、アプリで 切り抜きフィルタ ボタン。

アプリバーのスペースには限りがあります。アプリが宣言するアクション数を超える場合 超過したアクションがアプリバーによってオーバーフロー メニューに送信されます。 また、アクションを常にオーバーフロー メニューに表示するよう指定することもできます。 アプリバーには表示しません

アクションバー アイコンが表示されている「Now in Android」アプリを示す画像
図 1. 「Now in Android」のアクション アイコン。
で確認できます。

アクション ボタンを追加する

アクション オーバーフローで使用可能なすべてのアクション ボタンとその他のアイテムは、 (XML で定義) メニュー リソースをご覧ください。追加 追加するには、プロジェクトのプロジェクト内で新しい XML ファイルを作成します。 res/menu/ ディレクトリ。

追加 <item> 要素を、アクションバーに含める各アイテムの 次のサンプル メニュー XML ファイル:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto">

    <!-- "Mark Favorite", must appear as action button if possible. -->
    <item
        android:id="@+id/action_favorite"
        android:icon="@drawable/ic_favorite_black_48dp"
        android:title="@string/action_favorite"
        app:showAsAction="ifRoom"/>

    <!-- Settings, must always be in the overflow. -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          app:showAsAction="never"/>

</menu>

app:showAsAction 属性は、アクションを ボタンとしてアプリバーに表示されます。次の値を設定した場合: app:showAsAction="ifRoom" - 以下のサンプルコードの Favorite アクション - スペースに空きがある場合、アクションがボタンとして表示されます。 そのアプリバーを表示します。十分なスペースがない場合、過剰なアクションは オーバーフロー メニューを選択します。app:showAsAction="never" を設定した場合( サンプルコードの settings アクション。このアクションは常に オーバーフロー メニューに表示され、アプリバーには表示されません。

アクションが表示される場合、システムはアクションのアイコンをアクション ボタンとして使用します。 。Google Chat には便利なアイコンが マテリアル アイコン

アクションに応答する

ユーザーがいずれかのアプリバー項目を選択すると、 アクティビティの onOptionsItemSelected() コールバック メソッドを呼び出し、 MenuItem オブジェクト タップされたアイテムを示します実装では、 onOptionsItemSelected() の場合は、 MenuItem.getItemId() メソッドを使用して、タップされたアイテムを特定します。返される ID は、指定した値と一致する 対応する <item> 要素の android:id 属性。

たとえば次のコード スニペットは、ユーザーが選択したアクションを確認します。 このメソッドはユーザーの操作を認識しない場合、スーパークラスを呼び出します。 メソッド:

Kotlin

override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
    R.id.action_settings -> {
        // User chooses the "Settings" item. Show the app settings UI.
        true
    }

    R.id.action_favorite -> {
        // User chooses the "Favorite" action. Mark the current item as a
        // favorite.
        true
    }

    else -> {
        // The user's action isn't recognized.
        // Invoke the superclass to handle it.
        super.onOptionsItemSelected(item)
    }
}

Java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            // User chooses the "Settings" item. Show the app settings UI.
            return true;

        case R.id.action_favorite:
            // User chooses the "Favorite" action. Mark the current item as a
            // favorite.
            return true;

        default:
            // The user's action isn't recognized.
            // Invoke the superclass to handle it.
            return super.onOptionsItemSelected(item);

    }
}