• 追加された行はこの色です。
  • 削除された行はこの色です。
[[ワーキンググループ/ハンズオンセッション]]

* ボタンを作ってみよう [#cc95c738]

ユーザー操作を受け取るために、画面上にボタンを作ってみましょう。
ここでは、AndroidのEclipseプラグインを用いてボタンを定義します。

** プロジェクトを作成する [#i5871fbd]

必要に応じて、File > New > Android Projectで新規のプロジェクトを作成します。

ここでは、以下のようなプロジェクトを作成してみます。

#ref(Project.jpg)

|Project Name|HelloButtonProject|
|Build Target|Google APIs|
|Application Name|HelloButton|
|Package Name|jp.hews.hellobutton|
|Create Activity|HelloButtonActivity|
|Min SDK Version|3(Bild Targetを指定すると自動的に設定される)|


** 画面にボタンを配置する [#v40ce8cd]

画面にボタンを配置するには、レイアウトを定義したXMLファイルを編集します。

まず、レイアウトを定義したres/layout/main.xmlを開いて、画面上にボタンを配置します。

この画面でボタンを配置するには、GUIで挿入する方法と、下部の「main.xml」タブから直接XMLを編集する方法があります。ここでは、GUIを用いて定義します。

#ref(AddButton.jpg)

- Package Explorerでres/layout/main.xmlをダブルクリックしてmain.xmlを開きます。
- Viewsのフォルダーのなかの「Button」要素をドラッグして、画面に挿入します。
- Button01という文字の表示されたボタンが配置されます

** ボタンに表示するラベルを定義する [#za6a8b15]

ボタンのラベルは、res/values/strings.xmlで定義します。ここでは、ボタンのプロパティから開かれるResource Chooserを使用して、文字列を定義します。

#ref(ButtonLabel.jpg)

- 下部のPropertiesタブで、Text要素を選択して、Resource Chooserを選択します。

#ref(ResourceChooser.jpg)

- 下部の「New String」を選択するとCreate Android Stringの画面が開きます。
- Stringに表示する文字として「Push Me!」を入力します
- New R.stringに、定義した文字列のIDとして、「button_label」を入力します
- Previewを押して文字列がstring.xmlに反映されることを確認します。
- OKを押して、Resource Chooserの画面に戻ります
- いま定義した「button_lable」を選択して、「OK」を押します

** ボタンが押された時の処理を追加する [#o3fa95fc]

ボタンクラス(android.widget.Button)にリスナーを登録することで、ボタンが押された時の処理を追加することができます。
ボタンが押された時に呼び出されるリスナーの型は、android.view.View.OnClickListenerです。

ここでは、メインのアクティビティクラスであるHelloButtonActivityにリスナーを実装します。

- HelloButtonActivityをダブルクリックして開きます
- 先頭のインポート文の最後に実装に必要なボタンクラスとリスナークラスをインポートします。
 ...
 import android.view.View;
 import android.widget.Button;
 
- HelloButtonActivityクラスに「implements View.OnClickListener」を追加して、リスナーの実装を宣言します。
 
 public class HelloButtonActivity extends Activity implements View.OnClickListener {
 
- HelloButtonActivityクラスに「public void onClick(View v)」メソッドを追加して、リスナーを実装します。
-- リスナーのメソッドの中では、finish()を呼び出します。このメソッドを呼び出すと、そのアクティビティを終了します。
     public void onClick(View v) {
         finish();
     }

- HelloButtonActivityクラスのonCreateメソッドで、ボタンにリスナーを登録します。
-- setContentViewメソッドで、main.xmlで定義した要素を表示します
-- findViewByIdメソッドで、main.xmlで定義したボタンのインスタンスを取り出します。
-- 取り出したボタンクラスのsetOnClickListenerメソッドにthisを渡すことで、リスナーを登録します
 
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         
         Button button = (Button)findViewById(R.id.Button01);
         button.setOnClickListener(this);
     }

- 作成したソースコードは、以下のようになっています。

 package jp.hews.hellobutton;
 
 import android.app.Activity;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.Button;
 
 public class HelloButtonActivity extends Activity implements View.OnClickListener {
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         
         Button button = (Button)findViewById(R.id.Button01);
         button.setOnClickListener(this);
     }
 
     public void onClick(View v) {
         finish();
     }
 }

** プログラムを実行する [#z1370123]

修正したプログラムを実行して、表示されたボタンを押すことで、アクティビティが終了することが確認できます。

#ref(HelloButton.png)

- RunメニューのRunでRun As画面を表示する
- 「Android Application」を選択することで、アプリケーションが実行される
- 「Push Me!」というボタンを押すと画面が閉じて、ランチャーの画面が表示される

** 演習問題 [#yce513d6]

- ボタンをふたつ横に並べて配置してみましょう。
- 二つのボタンのクリックを一つのリスナーのメソッドで受けて、どちらのボタンが押されたのかを判定してみましょう。
- イメージボタンや、ラジオボタンなど、別の種類のボタンを作ってみましょう。

** PDF版の資料 [#aa1a1746]
#ref(HelloButton.pdf)
----
[[ワーキンググループ/ハンズオンセッション]]