1.1. シンプルなナビゲーション
画面のレイアウトで、シンプルなナビゲーションの基本的な作成について説明します。
上記のイメージのように、アプリ上部のアクションバーにメニューアイテムが表示されるシンプルなレイアウトです。
各メニューアイテムを選択することにで、処理を行うようなアプリとなります。
なお、上記はメニューボタンがない端末での表示で、メニューボタンがある端末では以下のような表示となります。
この場合、隠れているメニューは端末のメニューボタンを押下することで表示されます。
それでは、上記のような ActionBar へメニューを表示するようなアプリを作成していきます。
ますは、プロジェクトを作成します。
プロジェクトの作成
eclipse の パッケージエクスプローラ を右クリックし、「新規 - Android アプリケーション・プロジェクト」を選択します。
以下の、新規 Android アプリケーション の作成ダイアログが表示されます。
アプリケーション名を 「Navi_simple」 とし、最小必須 SDK を 「API 14 : Android 4.0 (IceCreamSandwich)」 とし、「次へ」を選択します。
「カスタム・ランチャー・アイコンを作成する」 のチェックをはずし、「次へ」 を選択します。
「Black Activity」 を選択し、「次へ」を選択します。
ナビゲーション・タイプ で 「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への表示はアイコンとなります。 |
ここで定義したメニューは以下の様な表示となります。
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. タブナビゲーション