アプリでは、ユーザーがアプリのメイン画面に戻る方法を見つけやすくする必要があります。そのための簡単な方法は、メイン アクティビティ以外のすべてのアクティビティに対して、アプリバーにアップボタンを表示することです。ユーザーがアップボタンを選択すると、アプリは親アクティビティに移動します。
このレッスンでは、マニフェストでアクティビティの親を宣言し、アプリバーのアップボタンを有効にすることで、アクティビティにアップボタンを追加する方法を紹介します。
アプリでナビゲーションを処理するもう 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()
メソッドでアップ アクションを捕捉する必要はありません。
その代わり、アクションへの対応で説明されているように、メソッドはそのスーパークラスを呼び出す必要があります。スーパークラス メソッドは、アプリ マニフェストで指定されているとおりに親アクティビティに移動することで、アップの選択に対応します。