6 月 3 日の「#Android11: The Beta Launch Show」にぜひご参加ください。

アップ アクションの追加

アプリでは、ユーザーがアプリのメイン画面に戻る方法を見つけやすくする必要があります。そのための簡単な方法は、メイン アクティビティ以外のすべてのアクティビティに対して、アプリバーにアップボタンを表示することです。ユーザーがアップボタンを選択すると、アプリは親アクティビティに移動します。

このレッスンでは、マニフェストでアクティビティの親を宣言し、アプリバーのアップボタンを有効にすることで、アクティビティにアップボタンを追加する方法を紹介します。

アプリでナビゲーションを処理するもう 1 つの方法は、ナビゲーション アーキテクチャ コンポーネント(アルファ版)を使用することです。ユーザーがアップボタンをクリックすると、API によりアプリの現在の画面からの「アップ」移動が処理されます。詳しくは、ナビゲーション アーキテクチャ コンポーネントをご覧ください。

親アクティビティを宣言する

アクティビティでアップ機能をサポートするには、アクティビティの親を宣言する必要があります。アプリ マニフェストでこれを行うには、android:parentActivityName 属性を設定します。

android:parentActivityName 属性は Android 4.1(API レベル 16)で導入されました。古いバージョンの Android を搭載したデバイスをサポートするには、<meta-data> 名前 / 値ペアを定義します。ここで、名前は "android.support.PARENT_ACTIVITY" で、値は親アクティビティの名前です。

たとえば、アプリに MainActivity という名前のメイン アクティビティと 1 つの子アクティビティあるとします。次のマニフェスト コードでは両方のアクティビティを宣言し、親子関係を指定しています。

    <application ... >
        ...

        <!-- The main/home activity (it has no parent activity) -->

        <activity
            android:name="com.example.myfirstapp.MainActivity" ...>
            ...
        </activity>

        <!-- A child of the main activity -->
        <activity
            android:name="com.example.myfirstapp.MyChildActivity"
            android:label="@string/title_activity_child"
            android:parentActivityName="com.example.myfirstapp.MainActivity" >

            <!-- Parent activity meta-data to support 4.0 and lower -->
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.example.myfirstapp.MainActivity" />
        </activity>
    </application>
    

アップボタンを有効にする

親アクティビティを持つアクティビティに対してアップボタンを有効にするには、アプリバーの setDisplayHomeAsUpEnabled() メソッドを呼び出します。これは通常、アクティビティの作成時に行います。たとえば、次の onCreate() メソッドは、MyChildActivity のアプリバーとして Toolbar を設定し、そのアプリバーのアップボタンを有効にします。

Kotlin

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_my_child)

        // my_child_toolbar is defined in the layout file
        setSupportActionBar(findViewById(R.id.my_child_toolbar))

        // Get a support ActionBar corresponding to this toolbar and enable the Up button
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
    }
    

Java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_child);

        // my_child_toolbar is defined in the layout file
        Toolbar myChildToolbar =
            (Toolbar) findViewById(R.id.my_child_toolbar);
        setSupportActionBar(myChildToolbar);

        // Get a support ActionBar corresponding to this toolbar
        ActionBar ab = getSupportActionBar();

        // Enable the Up button
        ab.setDisplayHomeAsUpEnabled(true);
    }
    

アクティビティの onOptionsItemSelected() メソッドでアップ アクションを捕捉する必要はありません。 その代わり、アクションへの対応で説明されているように、メソッドはそのスーパークラスを呼び出す必要があります。スーパークラス メソッドは、アプリ マニフェストで指定されているとおりに親アクティビティに移動することで、アップの選択に対応します。