1.1. シンプルなナビゲーション

画面のレイアウトで、シンプルなナビゲーションの基本的な作成について説明します。
ナビゲーション - None
上記のイメージのように、アプリ上部のアクションバーにメニューアイテムが表示されるシンプルなレイアウトです。
各メニューアイテムを選択することにで、処理を行うようなアプリとなります。

なお、上記はメニューボタンがない端末での表示で、メニューボタンがある端末では以下のような表示となります。 この場合、隠れているメニューは端末のメニューボタンを押下することで表示されます。
ナビゲーション - None
それでは、上記のような ActionBar へメニューを表示するようなアプリを作成していきます。
ますは、プロジェクトを作成します。

プロジェクトの作成

eclipse の パッケージエクスプローラ を右クリックし、「新規 - Android アプリケーション・プロジェクト」を選択します。
以下の、新規 Android アプリケーション の作成ダイアログが表示されます。
プロジェクト作成 1
アプリケーション名を 「Navi_simple」 とし、最小必須 SDK を 「API 14 : Android 4.0 (IceCreamSandwich)」 とし、「次へ」を選択します。

プロジェクト作成 2
「カスタム・ランチャー・アイコンを作成する」 のチェックをはずし、「次へ」 を選択します。
プロジェクト作成 2
「Black Activity」 を選択し、「次へ」を選択します。
プロジェクト作成 3
ナビゲーション・タイプ で 「None」 を選択し、「完了」 を選択します。

これで、シンプルなナビゲーションのプロジェクトの雛形のプロジェクトが作成されます。

プロジェクトの構成

プロジェクトを作成すると、自動で必要なファイルが作成されます。
シンプルなナビゲーションを作成する際に、必要となるファイルは以下となります。
(ActionBar に メニューを追加するために必ず必要となるファイルです。)

ファイル 説明
res - menu - main.xml アプリのメニューのレイアウトを定義するファイルです。
res - values - string.xml アプリで使用する文字列を定義するファイルです。
src - MainActivity.java アプリのメイン画面のクラスファイルです。ここで、メニューの項目が押下された時の処理を行います。

それぞれのファイルにメニューを作成するための定義を追加していきます。

メニューのレイアウト作成

ActionBar にメニューを表示するためには、menu.xml ファイルにレイアウトを定義します。
プロジェクトの [res - menu - main.xml] がプロジェクトに作成されているはずなので、このファイルを開きます。

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>
</menu>

既に、メニューのアイテムが記述されています。上記の記述で、「Setting」というメニューが1個のみのメニューとなります。
今回は、Menu1 ~ Menu4 のメニューを作成していきますので、以下のように記述します。

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/action_menu1"
        android:orderInCategory="1"
        android:showAsAction="always"
        android:title="@string/action_menu1"
        android:icon="@android:drawable/ic_menu_add"/>
    <item
        android:id="@+id/action_menu2"
        android:orderInCategory="2"
        android:showAsAction="ifRoom"
        android:title="@string/action_menu2"
        android:icon="@android:drawable/ic_menu_agenda"/>
    <item
        android:id="@+id/action_menu3"
        android:orderInCategory="3"
        android:showAsAction="ifRoom"
        android:title="@string/action_menu3"
        android:icon="@android:drawable/ic_menu_always_landscape_portrait"/>
    <item
        android:id="@+id/action_menu4"
        android:orderInCategory="4"
        android:showAsAction="never"
        android:title="@string/action_menu4"/>
</menu>

また、[res - values - string.xml] ファイルには以下を追加します。

<string name="action_menu1">Menu1</string>
<string name="action_menu2">Menu2</string>
<string name="action_menu3">Menu3</string>
<string name="action_menu4">Menu4</string>

item タグで、ActionBarに表示するアイテムを追加します。
各属性の設定については、以下のような意味となります。

属性 説明
id 各メニューアイテムを識別するためのIDです。
orderInCategory 表示する順番を設定します。この数字が小さいほうが優先的に表示されます。
showAsAction ActionBar への表示方法を設定します。以下の設定があります。
never : 常に表示されません。(常に隠れているメニューとなります。)
ifRoom : スペースに余裕がある場合に表示されます。
always : 常に表示されます。
withText : テキストを一緒に表示します。(ifRoom|withText の様に指定します。)
        ただし、画面の幅が小さい場合(縦画面等の時)は表示されません。
title メニューアイテムのタイトルを設定します。
icon メニュー項目のアイコンを設定します。アイコンが設定されている場合、ActionBarへの表示はアイコンとなります。

ここで定義したメニューは以下の様な表示となります。
ナビゲーション - None menu1 は showAsAction が always で、icon が設定されているため、ActionBar に icon が表示されます。
menu2 は、showAsAction が ifRoom でスペースに余裕があるので ActionBar に表示されます。 また、icon は設定されていないので、title のテキストが表示されます。
menu3 は、showAsAction が ifRoom でスペースに余裕がないので ActionBar に表示されません。 隠れているメニューを開くと title のテキストが表示されます。また、icon は設定されていますが、ActionBar への表示でないため表示されません。
menu4 は、showAsAction が never なので ActionBar に表示されません。 隠れているメニューを開くと、title のテキストが表示されます。

次は、メイン画面にメニューアイテムを選択したときの処理を追加します。

メニューアイテム表示・選択処理

メニューアイテムの表示と選択したときの処理は、MainActivity.java ファイルに記述します。

package com.example.navi_simple;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

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

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }
  
  @Override
  public boolean onMenuItemSelected(int featureId, MenuItem item) {
    switch(item.getItemId()) {
    case R.id.action_menu1:
      // menu1 選択時の処理を記述
      break;
    case R.id.action_menu2:
      // menu2 選択時の処理を記述
      break;
    case R.id.action_menu3:
      // menu3 選択時の処理を記述
      break;
    case R.id.action_menu4:
      // menu4 選択時の処理を記述
      break;
    default:
      break;
    }
    return super.onMenuItemSelected(featureId, item);
  }
}

onCreateOptionsMenu() メソッドの中で、定義した main.xml ファイルをこの画面に関連付けます。
(この部分は、プロジェクト作成時に自動で生成されます。)

onMenuItemSelected() メソッドに、各メニューが選択されたときの処理を記述します。
item の id でケース分けをし、それぞれのアイテムが選択されたときの処理を実装します。


上記で、基本的な作成の説明は終わりです。
このレイアウトを使用したサンプルアプリの 「メモアプリ」 の作成について、以下で説明していますので参考にしてみてください。
2. メモリアプリの作成



次は・・・
タブナビゲーションの基本的な作成について説明します。
⇒ 1.2. タブナビゲーション