SSブログ

XMLで画面を作成してみる2・ついでに画面遷移[androidアプリ開発]

画面作成の2回目ですイェーイ・・・ハァ(´・ω・`)

前回作ったsample001を使って画面をいろいろいじってみよう。

image01.jpg

新規作成したデフォのプロジェクトのmain.xmlファイルを開く。

パレットからプレーン・テキストを追加してみる。

image02.jpg

解説サイトにあるのとなんか違う・・・。

image09.jpg
解説サイトはこんな風に出てた。

よくよく見ると、プロパティーウインドウに @+id/EditText01の文字が。
SDKのバージョンの違いなのかな?よくわかんない。
ちなみにプロパティーウインドウが出てない人はEclipseの「ウインドウ」-「ビューの表示」で出しておこう。これないとヤバい。

プレーンテキストとボタンを配置して、ためしにビルド。

image03.jpg
こうなった。計画通り。
ちゃんと文字も入力できる。

これだけじゃつまんないので、画面をもう一つ追加して、画面遷移するようにしてみる。画面の遷移は配置したボタンで行う。つまり、ボタンをタップするというアクションイベントを起こすわけだ。
先にボタン名を「subへ移動」としておこう。

おいなんかいきなり高度じゃね?(´・ω・`)

まず、上記の画面がメイン画面なので、遷移先のサブ画面を作成する。
「画面」を表示するにはActivityが必要なので、サブ画面を表示するためのActivityを新しく作成しよう。

とりあえずxmlファイルから用意。
ファイル-新規-AndroidXMLファイルを選ぶ。
プロジェクト名はそのまま、ファイル名はてきとうにsubとしてみた。
image05.jpg
次にこの画面。
なにこれ意味不明すぎる。
よくよく読むと画面の書式設定っぽい。

こんな風に設定。

Size:Normal
UI Mode:NotLong
Orientation:Portrait
Density:MediumDensity
TouchScreen:Finger
Keyboard:Soft
TextInput:Qwerty
Navigation Method:Trackball
Dimension:320×480

これで完了。

image06.jpg
勝手にディレクトリ作って放り込んでやがるので、後々こんなディレクトリを指定するハメになるのはきついのでlayoutディレクトリに移動させておこう。この変なディレクトリは消しておく。
※作ったばかりのディレクトリやファイルはオープン状態になってるみたいで消せなかったりする。Eclipseを一度終了させると消えます。これバグじゃね?(´・ω・`)

image07.jpg
TextViewとボタンを配置してみた。
TextViewの中身はプロパティーウインドウでいじれる。
これ便利だなー。GUIってすばらしい(´・ω・`)

プロパティーウインドウのほうでボタン名を「戻る」とでもしておく。

次に、このsub.xmlを表示するクラスを作成する。画面を持つのでActivityということに。

「ファイル」-「新規」-「クラス」を選択。
image05.jpg
おなじみのこのウインドウ。

ソースフォルダーは変更なし。
パッケージは「参照」でいま編集中のパッケージを選択。

名前はクラス名のこと。
とりあえず「subActivity」とした。
でも最初の文字は大文字にするのがマナーみたい。無視して進んだけどエラーはなかった。

次にこのsubActivityの中身をいじって、さっきのsub.xmlを表示するように修正。

package jp.ne.so_net.blog.androp.sample001;

import android.app.Activity;
import android.os.Bundle;

public class subActivity extends Activity {

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


@override以降にonCreateでこのActivityをスタートするようにして、setContentViewで表示するxmlに sub を指定してやる。

これでsubActivity.javaとsub.xmlの紐付けができた。

このままだとメイン画面と関係のない孤立した画面のままなので、
AndroidManifest.xml
というなんだかよくわからないファイルをいじってActivityの管理をするみたい(´・ω・`)

メイン画面のActivityが記述してある次から、 

<activity android:name=".subActivity"
  android:label="@string/app_name">
</activity>

と記述して「subActivityってのが存在するよ!」 と宣言しておいてやる。
ちなみにソースで貼り付けたかったけどSo-Netブログのウィジグがクソすぎて貼り付かなかった。ソネットマジクソネット(´・ω・`)

続いて、Sample001Activity.javaを編集して、サブ画面へ行くようにボタンクリックのアクションを記述する。

package jp.ne.so_net.blog.androp.sample001;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Sample001Activity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
	
	private Button button1;         //ボタン変数
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //ボタン変数と、XMLで作ったボタン(button1)を関連付け
        button1=(Button)findViewById(R.id.button1);        
        //button1のクリックイベントを拾う
        button1.setOnClickListener(this);
    }

    //---------------------------
    //ボタンがクリックされたら呼ばれるメソッド
    //---------------------------
    public void onClick(View v) {
    	if(v==button1){
            Intent intent = new Intent(this, subActivity.class);
            startActivity(intent);
        }
    }
}


まず、 private Button button1;  の部分でボタン変数 button1 を定義。

で、button1変数がXMLファイル内のどのパーツのことなのかを定義。

さらに、button1にクリックイベントを設定。

ここまでだとbutton1をクリックした時にどうなるのかが記述されていないので何も起こらない。

なので、button1をクリックしたら呼び出される処理(メソッド)を記述。
インテントとかいうナゾのメソッド?で、subActivityを呼び出して、startActivityでインテントに放り込んだsubAcrivityをスタートし、メインの処理をそっちへ委譲しています。

よくわかんねーや(´・ω・`)

いろいろパーツが足りないみたいな波線エラーが出るので、マウス合わせて適当に入れていく。

setOnClickListener(this);
を使うと下図のエラーが出るので、一番下の「OnClickListenerに実装」っていうのを選んでみた。image01.jpg

そうすると

 image02.jpg

なんかクラス定義のとこに見知らぬコードが出てきた。 

エラー消えたのでまぁいいや(´・ω・`)

実行してみる。

image03.jpg

ボタンをクリックすると

image04.jpg

移動した。わーい。

同様に、subActivity.javaの中身もいじって「戻る」ボタンが生きるようにする。

package jp.ne.so_net.blog.androp.sample001;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class subActivity extends Activity implements OnClickListener {

	private Button button1;         //ボタン変数
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.sub);

        //ボタン変数と、XMLで作ったボタン(button1)を関連付け
        button1=(Button)findViewById(R.id.button1);        
        //button1のクリックイベントを拾う
        button1.setOnClickListener(this);
	}

    //---------------------------
    //ボタンがクリックされたら呼ばれるメソッド
    //---------------------------
    public void onClick(View v) {
    	if(v==button1){
            Intent intent = new Intent(this, Sample001Activity.class);
            startActivity(intent);
        }
    }
}


メイン画面のSample001Activity.javaとの違いは、クリックで呼び出されるメソッドのところでターゲットクラスをSample001Activityにしているだけ。

これでビルドすると、メイン画面とサブ画面を行ったり来たりするしょうもないアプリができあがり。

画面遷移だけでこんなたいへんなの?死ぬの?(´・ω・`)

 


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:携帯コンテンツ

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。