画面遷移するAndroidアプリを作成する
メニューから選択し、別画面(別Activity)に遷移するアプリの作成します。
■AndroidSDKリファレンス(サイト)
http://developer.android.com/reference/packages.html
■AndroidSDKリファレンス
android-sdk-windows-1.5_r2.zip
解凍後のフォルダ内
docs/reference/packages.html
■カラー設定
http://developer.android.com/guide/topics/resources/available-resources.html
色設定xmlファイルを作成する
ScreenTransitionDemo/res/values
にフォーカスをあて、右クリックし、
「新規」→「Android XML File」を選択し、color.xmlを作成します。
※Android XML Fileで作成できない場合は「ファイル」で作成します。
color.xml
<resources>
<color name="black">#000000</color>
<color name="pink">#FFC0CB</color>
<color name="deepskyblue">#00BFFF</color>
</resources>
直接color.xmlを編集してもよいですが、
「リソース」タブをクリックし、追加ボタンをクリックすると

が開きます。ここで「Color」をダブルクリックすると
Resources Elementに追加されるので、「Name」と「Value」を入力します。

この方法でもxmlファイルの編集が可能です。
strings.xml
strings.xml
<resources>
<string name="app_name">ScreenTransitionDemo</string>
<string name="main_msg">Main Screen</string>
<string name="next_msg">Next Screen</string>
<string name="menu_main">メイン画面</string>
<string name="menu_next">次の画面</string>
<string name="menu_finish">Activity終了</string>
</resources>
main.xml
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/pink"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:text="@string/main_msg"
/>
</LinearLayout>
LinearLayoutタグの
android:background="@color/pink”
で背景色を、
TextViewタグの
android:textColor="@color/black"
でテキストの色を指定しています。
テキストは
android:text="@string/main_msg"
を指定しています。
遷移先のActivityを作成する
遷移先画面のxmlファイルを作成する
ScreenTransitionDemo/res/layout
にフォーカスをあて、右クリックし、
「新規」→「Android XML File」を選択し、next.xmlを作成します。
※Android XML Fileで作成できない場合は「ファイル」で作成します。
next.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/deepskyblue"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:text="@string/next_msg"
/>
android:background="@color/deepskyblue"
で背景色を、
TextViewタグの
android:textColor="@color/black"
でテキストの色を指定しています。
テキストは
android:text="@string/next_msg"
を指定しています。
AndroidManifest.xml
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.sample"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="NextActivity"></activity>
</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>
activity(NextActivity)を追加します。
Android Virtual Devices Manager
ターゲットをAndroid 1.5で作成した AVDを使用します。
MainActivity.java
MainActivity.java
package android.sample;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
/** メニューID */
private final int MENU_ID1 = Menu.FIRST;
private final int MENU_ID2 = Menu.FIRST + 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
/**
* メニューを作成する
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0,
MENU_ID1,
0,
getString(R.string.menu_next)).setIcon(android.R.drawable.ic_menu_crop);
menu.add(0,
MENU_ID2,
1,
getString(R.string.menu_finish)).setIcon(android.R.drawable.ic_menu_close_clear_cancel);
return true;
}
/**
* メニューボタン押下時の処理
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
return true;
}
/**
* メニューを選択時の処理
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ID1:
//次の画面に遷移させる
Intent intent = new Intent();
intent.setClassName(
"android.sample",
"android.sample.NextActivity");
startActivity(intent);
return true;
case MENU_ID2:
//Activity終了
finish();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
メニューの表示と選択時の処理
private final int MENU_ID1 = Menu.FIRST; private final int MENU_ID2 = Menu.FIRST + 1;
ここでIDを宣言しています。
Menu.FIRSTはメニューの一番最初のIDです。以降は+1をします。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0,
MENU_ID1,
0,
getString(R.string.menu_next)).setIcon(android.R.drawable.ic_menu_crop);
menu.add(0,
MENU_ID2,
1,
getString(R.string.menu_finish)).setIcon(android.R.drawable.ic_menu_close_clear_cancel);
return true;
}
onCreateOptionsMenu(Menu menu)でメニューを作成しています。
android.view.Menu.add(int groupId, int itemId, int order, CharSequence title)
を使用して、メニューを追加しています。
groupId:グループのID
itemId: アイテムID
order: アイテムの順序
title: メニューに表示されるタイトル
となっています。
.setIcon(android.R.drawable.ic_menu_crop);
の部分でメニューに表示するアイコンを設定しています。
android.R.drawable.ic_menu_crop
android.R.drawable.ic_menu_close_clear_cancel
はAndroidで用意されているアイコンですが、
res/drawable内に作成したアイコンを配置し、そのアイコンを指定することもできます。
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
return true;
}
onPrepareOptionsMenu(Menu menu)
はメニューボタンが押されたときの時の処理です。
trueを返すとメニューが表示され、false返すとメニューが表示されません。
@Override
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ID1:
//次の画面に遷移させる
Intent intent = new Intent();
intent.setClassName(
"android.sample",
"android.sample.NextActivity");
startActivity(intent);
return true;
case MENU_ID2:
//Activity終了
finish();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
onOptionsItemSelected(MenuItem item)
はメニューが選択されたときの処理です。
選択されたメニューごとに処理を記述しています。
画面遷移
@Override
Intent intent = new Intent();
intent.setClassName(
"android.sample",
"android.sample.NextActivity");
startActivity(intent);
Activityの遷移やアプリケーション間の遷移にはIntentを使用します。
setClassName(String packageName, String className)
に遷移先パッケージ名とクラス名を指定して、
startActivity()
でActivityを実行しています。
Activityの終了
finish();
でこのActivityを終了しています。
NextActivity.java
NextActivity.java
package android.sample;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class NextActivity extends Activity {
/** メニューID */
private final int MENU_ID1 = Menu.FIRST;
private final int MENU_ID2 = Menu.FIRST + 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.next);
}
/**
* メニューを作成する
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0,
MENU_ID1,
0,
getString(R.string.menu_main)).setIcon(android.R.drawable.ic_menu_crop);
menu.add(0,
MENU_ID2,
1,
getString(R.string.menu_finish)).setIcon(android.R.drawable.ic_menu_close_clear_cancel);
return true;
}
/**
* メニューボタン押下時の処理
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
return true;
}
/**
* メニューを選択時の処理
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ID1:
//次の画面に遷移させる
Intent intent = new Intent();
//intent.putExtra("skin_changed", true);
intent.setClassName(
"android.sample",
"android.sample.MainActivity");
startActivity(intent);
return true;
case MENU_ID2:
//Activity終了
finish();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
アプリを実行する

メニューボタン
を押下します。

メニューが表示されるので、「次の画面」を選択します。

次のActivityが表示されます。
メニューボタンを押下します。

メニューが表示されるので、「メイン画面」を選択します。

メイン画面が表示されます。
ここで戻るボタン
を押下すると、「Next Screen」の文言が表示される画面になります。
Androidでは「スタック」という概念があり、Activity(画面)は遷移するたびにスタックへタスクが積まれていきます。戻るボタンは1つ前のActivity(画面)に戻るため、「Next Screen」の画面が表示されたのです。その際、今回表示された「Main Screen」と表示するActivity(画面)はスタックから取り除かれます。
戻るボタンを使用した画面遷移をまとめると、以下のようになります。
実行→「Main Screen」→次の画面→「Next Screen」→メイン画面→「Main Screen」→戻るボタン→「Next Screen」→戻るボタン→「Main Screen」→戻るボタン→待ち受け画面
スタックにタスクがなくなると待ち受け画面に戻ります。
メニューから「Activity終了」を選択すると、表示されているActivity(画面)が終了され、表示されているActivity(画面)はスタックから取り除かれます。
「Activity終了」(finish();)を使用した画面遷移をまとめると、以下のようになります。
実行→「Main Screen」→次の画面→「Next Screen」→Activity終了→「Main Screen」→Activity終了→待ち受け画面
また、ホームボタン
を押下すると待ち受け画面に戻ります。しかし、スタックはそのままの状態(タスクが積まれている状態)になります。




