画面遷移する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

Androidアプリを作成する

「ファイル」→「新規」→「Androidプロジェクト」
プロジェクト名、アプリケーション名、パッケージ名を入力、ターゲット名を選択する。
完了ボタンをクリック。

色設定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を作成する

ScreenTransitionDemo/src/sndroid/sample
にフォーカスをあて、右クリックし、
「新規」→「クラス」を選択します。
名前にクラス名を入力、スーパークラスにandroid.app.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"
    />
LinearLayoutタグの
    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終了→待ち受け画面

また、ホームボタンを押下すると待ち受け画面に戻ります。しかし、スタックはそのままの状態(タスクが積まれている状態)になります。

このページ「画面遷移」の上へ