とある企業の一次選考の帰りに、ジュンク堂へと立ち寄り、あれこれ物色していたらこんな本を見つけた。
『初歩からわかる Android 最新プログラミング』 ¥2,800 (税別) |
ちょうど Android のお勉強の教材を探していたところだった事もあり、1時間ほど迷った挙げ句、思い切って買ってきてしまった。
前回ですでに開発環境は導入済みなので、第 2 章から攻略していこうと思う(本の内容をただなぞっているだけなので、解説というよりは実況中継になるが)。
※ 上の本では Android 2.2 を前提に解説されているが、ちょっと欲張って 2.3.3 で試した。
そのため、ところどころ本の内容とは異なる箇所がある。
あれこれ考えるよりも、手を動かす事を優先。まずは本に書いてある通り CheckDateTime という名前でプロジェクトを新規作成。その際、いくつかのファイルが自動的に生成された。
それらの中には、Android アプリの GUI を司る XML ファイル main.xml も含まれている。これを Eclipse で開くと、こんな感じで何やらビジュアル的な画面が現れた。
Eclipse で main.xml を開いたところ |
左側にはボタンとかがいっぱい用意されていて、ドラッグ & ドロップで画面に配置していけるらしい。
ボタンをドラッグしているところ。 |
これで画面にボタンが(なぜか左上に)追加された! やった!
ボタンが追加された! |
すると、ボタンが画面中央に移動した。
思い通りの位置にボタンを配置するには、ちょっとした慣れが必要そうだ。 NetBeans に標準装備の GUI ビルダーとは程遠い使い勝手である(が、NetBeans を知るつい最近まで、ぼくはソースコードベタ書きで GUI を構築していたので、それよりは多少マシだと感じた)。
この時点で、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" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:layout_height="wrap_content" android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" /> </LinearLayout>
これを以下のように修正。
<?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" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:id="@+id/dateTimeDisplay" /> <Button android:layout_height="wrap_content" android:text="現在時刻を確認" android:id="@+id/whatTime" android:layout_width="wrap_content" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" /> </LinearLayout>
TextView や Button の ID "@+id/xxxxx" のうち、xxxxx の部分は、後で Java から参照される TextView や Button の名前となるそうな。ふむふむ。
この変更が、実際の画面にどう反映されるのかを確認。
ご覧の通り、ボタンのラベルが変更された。
いよいよ Java を弄る。
自動的に生成された CheckDateTime.java は、こんな感じになっている。
package com.tercel_tech.checkdatetime; import android.app.Activity; import android.os.Bundle; public class CheckDateTime extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
ここに色々と付け足してアプリを作り上げていくのだという。
まずはさっきの TextView と Button を使用可能にするため、private フィールドに宣言(そして、 Ctrl + Shift + o で、しかるべきパッケージを import)。
package com.tercel_tech.checkdatetime; import android.app.Activity; import android.os.Bundle; import android.widget.Button; import android.widget.TextView; public class CheckDateTime extends Activity { private TextView myDateTimeView; private Button myShowDate; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
次に、アプリ起動時に実行される onCreate メソッドの中に myDateTimeView と myShowDate の初期化処理を書く。また、現在の時刻を表示するメソッド showCurrentDate も追加する。ぼくは Java のコーディングにはほんの少しだけ心得があるので、割と本の内容にビビらずスムーズにプログラムを書いていけたと思う。
package com.tercel_tech.checkdatetime; import java.text.SimpleDateFormat; import java.util.Date; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class CheckDateTime extends Activity { private TextView myDateTimeView; private Button myShowDate; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myDateTimeView = (TextView)findViewById(R.id.dateTimeDisplay); myShowDate = (Button)findViewById(R.id.whatTime); // ボタンが押されたら…… myShowDate.setOnClickListener (new View.OnClickListener() { public void onClick(View v) { // 現在の時刻を表示 showCurrentDate(); } }); showCurrentDate(); } // 現在の時刻を表示するメソッドだよ! private void showCurrentDate() { SimpleDateFormat sdf = new SimpleDateFormat ("yyyy.MM.dd '/' hh:mm:ss a zzz"); Date currentTime = new Date(); myDateTimeView.setText(sdf.format(currentTime)); } }
これでひとまず完成らしい。
やはり使い慣れた環境なだけあって、思った以上にスムーズに作れた。
これを実際に実行してみよう。レッツビルド!
どきどき。 |
わくわく。 |
お! |
キタ━━━━━━(゚∀゚)━━━━━━!!!! |
ちゃんとボタンも押せる! |
やった! できた!
はじめての Android アプリだ!! ショボいけど!!!