※本記事は2021年7月2日に更新しました。
「アプリバーの戻るボタンってどうやって追加するの?」
今回はそんな疑問にお答えします。
まずはこちらの動画をご覧ください。
画面2に『←』のボタンが追加され、押すと最初の画面に戻ります。
今回はこの戻るボタンをアプリバーに追加する方法を解説します。
前提として、本記事はAndroid Studio 4.2.1を対象に記載します。
また、筆者のAndroid Studioは日本語化しているため、日本語にて解説します。
本記事の使用言語はJavaとなります。
今回はProgate のJavaのレッスンがすべて理解できている、
という前提の上進めていきます。
では早速参りましょう!
前回の記事はこちら
戻るボタンの追加

戻るボタンの追加は次の手順で行います。
- アプリバーへ戻るボタンの追加
- 戻るボタンを押したときの動作を定義
一つ一つ解説していきます。
アプリバーへ戻るボタンの追加
アプリバーへの戻るボタンの追加は、以下の2文で行います。
1 2 3 4 | //アクションバーのオブジェクトを取得 ActionBar actionBar = getSupportActionBar(); //アクションバーに「戻るボタン」を追加 Objects.requireNonNull(actionBar).setDisplayHomeAsUpEnabled( true ); |
アクションバー(アプリバー)を取得し、
アプリバーのsetDisplayHomeAsUpEnabledをtrueにすることで、
戻るボタンが追加されます。
他のボタンと違い、XMLファイルは必要ありません。
戻るボタンを押したときの動作を定義
戻るボタンを押したときの動作の定義です。
onOptionsItemSelectedメソッドをオーバーライドすることで、動作を定義します。
動作自体は画面2のアクティビティの終了なのでfinish()を命令するだけです。
ただ、他のボタンが追加された場合に判別をつけなければならないため、
今回のコードではswitchを使った条件分岐文で記載します。
動作の定義文は以下の通りです。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 | @Override public boolean onOptionsItemSelected(MenuItem menuButton){ //戻り値の変数を定義。trueを初期値として代入 boolean result = true ; //選択されたメニューボタンのIDを取得(今回は戻るボタンのみのため条件分岐不要だが、追加したときを想定し記載) int buttonId = menuButton.getItemId(); //IDで条件分岐(戻るボタンが押されたときの命令以外省略可) switch(buttonId){ //戻るボタンが押されたとき case android.R.id.home: //画面を終了させる finish(); break ; //それ以外の時 default: result = super .onOptionsItemSelected(menuButton); break ; } return result; } |
押されたボタンのIDによって、条件分岐を行います。
戻るボタンのIDは、『android.R.id.home』となります。
以上が戻るボタンの追加の仕方となります。
サンプルコード
今回のサンプルコードを記載します。
画面2つを行き来するアプリのため、
レイアウトファイル、アクティビティファイルがそれぞれ2組となります。
画面移動に関してはこちらの記事で解説しています。
今回のアプリはGitHubに公開しています。
下記URLの『SampleBackButton』です。
是非参考にしてください。
以下、サンプルコードです。
文字列リソースファイル string.xml
1 2 3 4 5 | < resources > < string name = "app_name" >SampleBackButton</ string > < string name = "button" >画面2へ移動</ string > < string name = "text_view" >画面2</ string > </ resources > |
メイン画面レイアウトファイル activity_main.xml
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 | <? xml version = "1.0" encoding = "utf-8" ?> < androidx.constraintlayout.widget.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = ".MainActivity" > < Button android:id = "@+id/button" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "@string/button" app:layout_constraintBottom_toBottomOf = "parent" app:layout_constraintEnd_toEndOf = "parent" app:layout_constraintStart_toStartOf = "parent" app:layout_constraintTop_toTopOf = "parent" /> </ androidx.constraintlayout.widget.ConstraintLayout > |
画面2レイアウトファイル activity_main2.xml
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 | <? xml version = "1.0" encoding = "utf-8" ?> < androidx.constraintlayout.widget.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = ".MainActivity2" > < TextView android:id = "@+id/textView" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "@string/text_view" app:layout_constraintBottom_toBottomOf = "parent" app:layout_constraintEnd_toEndOf = "parent" app:layout_constraintStart_toStartOf = "parent" app:layout_constraintTop_toTopOf = "parent" /> </ androidx.constraintlayout.widget.ConstraintLayout > |
メイン画面アクティビティファイル MainActivity.java
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package com.zerokaraapp.samplebackbutton; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); //レイアウトからボタンを取得 Button button = findViewById(R.id.button); //ボタンリスナをセット (引数の中でリスナオブジェクトを取得) button.setOnClickListener( new ButtonClickListener()); } //ボタンリスナクラス private class ButtonClickListener implements View .OnClickListener{ //クリックしたときの動作を提示 @Override public void onClick(View view){ //MainActivityからMainActivity2への移動用インテントを用意 Intent intent = new Intent(MainActivity. this ,MainActivity2. class ); //MainActivityからMainActivity2への移動を開始 startActivity(intent); } } } |
画面2アクティビティファイル MainActivity2.java
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | package com.zerokaraapp.samplebackbutton; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.MenuItem; import java.util.Objects; public class MainActivity2 extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main2); //アクションバーのオブジェクトを取得 ActionBar actionBar = getSupportActionBar(); //アクションバーに「戻るボタン」を追加 Objects.requireNonNull(actionBar).setDisplayHomeAsUpEnabled( true ); } @Override public boolean onOptionsItemSelected(MenuItem menuButton){ //戻り値の変数を定義。trueを初期値として代入 boolean result = true ; //選択されたメニューボタンのIDを取得(今回は戻るボタンのみのため条件分岐不要だが、追加したときを想定し記載) int buttonId = menuButton.getItemId(); //IDで条件分岐(戻るボタンが押されたときの命令以外省略可) switch(buttonId){ //戻るボタンが押されたとき case android.R.id.home: //画面を終了させる finish(); break ; //それ以外の時 default: result = super .onOptionsItemSelected(menuButton); break ; } return result; } } |
※javaファイルについて、1行目packageの部分は人によって異なります。
コピペする場合は2行目以降をコピペしてください。
ここまで出来たら一度アプリを実行してみましょう。
一番上の動画のアプリのように動作すれば成功です。
まとめ

今回はアプリバーに実装する戻るボタンの追加の仕方について解説しました。
ユーザーが直感的に何が起こるかわかるボタンのため、
実装する価値はあるかと思います。
ぜひ使ってみてください。
本記事が初心者の方の参考になれば幸いです。
次回の記事はこちら
コメント