アプリバーの設定

最も基本的な形式のアクションバーでは、アクティビティのタイトルが片方の側に表示され、オーバーフロー メニューがもう一方の側に表示されます。アプリバーはこのシンプルな形式でユーザーに有用な情報を提供し、Android アプリのルック アンド フィールを統一しています。

図 1. アプリタイトルとオーバーフロー メニューが表示されたアプリバー。

Android 3.0(API レベル 11)以降では、デフォルトのテーマを使用するすべてのアクティビティが ActionBar をアプリバーとして備えています。ただし、さまざまな Android リリースを通じて徐々にネイティブ ActionBar にアプリバーの機能が追加されているため、使用する Android システムのバージョンとデバイスによってネイティブ ActionBar の動作が異なります。一方、Toolbar のサポート ライブラリのバージョンには最新の機能が追加されており、サポート ライブラリを使用できるすべてのデバイスでこれらの機能を使用できます。

このため、サポート ライブラリの Toolbar クラスを使用してアクティビティのアプリバーを実装する必要があります。サポート ライブラリのツールバーを使用すると、さまざまなデバイスでアプリが一貫して動作するようになります。たとえば、Toolbar ウィジェットを使用すると、Android 2.1(API レベル 7)以降を搭載しているデバイスでマテリアル デザインの操作感を実現できますが、ネイティブ アクションバーは、Android 5.0(API レベル 21)以降を搭載したデバイスでない限り、マテリアル デザインをサポートしません。

アクティビティへのツールバーの追加

Toolbar をアクティビティのアプリバーとして設定する手順は以下のとおりです。
  1. サポート ライブラリの設定で説明したように、v7 appcompat サポート ライブラリをプロジェクトに追加します。
  2. アクティビティで AppCompatActivity を拡張します。

    Kotlin

        class MyActivity : AppCompatActivity() {
          // ...
        }
        

    Java

        public class MyActivity extends AppCompatActivity {
          // ...
        }
        

    注: Toolbar をアプリバーとして使用するアプリのすべてのアクティビティにこの変更を適用します。

  3. アプリ マニフェストで、appcompat の NoActionBar テーマのいずれかを使用するように <application> 要素を設定します。これらのテーマのうちの 1 つを使用すると、アプリがネイティブ ActionBar クラスを使用してアプリバーを提供しなくなります。次に例を示します。
        <application
            android:theme="@style/Theme.AppCompat.Light.NoActionBar"
            />
        
  4. Toolbar をアクティビティのレイアウトに追加します。たとえば、次のレイアウト コードでは Toolbar が追加され、アクティビティの上に浮いているように表示されます。
        <android.support.v7.widget.Toolbar
           android:id="@+id/my_toolbar"
           android:layout_width="match_parent"
           android:layout_height="?attr/actionBarSize"
           android:background="?attr/colorPrimary"
           android:elevation="4dp"
           android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
           app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
        

    アプリバーの高さに関する推奨事項については、マテリアル デザインの仕様をご覧ください。

    ツールバーはアプリバーとして使用されるため、ツールバーをアクティビティのレイアウトの上部に配置します。

  5. アクティビティの onCreate() メソッドでアクティビティの setSupportActionBar() メソッドを呼び出し、アクティビティのツールバーを渡します。このメソッドにより、ツールバーがアクティビティのアプリバーとして設定されます。次に例を示します。

    Kotlin

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_my)
            // Note that the Toolbar defined in the layout has the id "my_toolbar"
            setSupportActionBar(findViewById(R.id.my_toolbar))
        }
        

    Java

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_my);
            Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
            setSupportActionBar(myToolbar);
        }
        

これで、アプリに基本的なアクションバーが追加されました。デフォルトでは、アクションバーにはアプリ名とオーバーフロー メニューのみが含まれます。オプション メニューには、最初は [Settings] アイテムのみが含まれます。アクションの追加と処理で説明したように、追加のアクションをアクションバーとオーバーフロー メニューに追加できます。

アプリバー ユーティリティ メソッドの使用

ツールバーをアクティビティのアプリバーとして設定すると、v7 appcompat サポート ライブラリの ActionBar クラスによって提供されるさまざまなユーティリティ メソッドにアクセスできます。このアプローチを使用すると、アプリバーの表示と非表示の切り替えなど多くの便利な機能を実装できます。

ActionBar ユーティリティ メソッドを使用するには、アクティビティの getSupportActionBar() メソッドを呼び出します。このメソッドは、appcompat の ActionBar オブジェクトへの参照を返します。参照を取得したら、いずれかの ActionBar メソッドを呼び出してアプリバーを調整できます。たとえば、アプリバーを非表示にするには ActionBar.hide() を呼び出します。