2010年10月31日日曜日

ボタンのイベントハンドラ

ボタンでは、イベントハンドラをmain.xmlファイルのonClickで指定しましたが、ソースからイベントハンドラを登録することもできます。


        mButton = (Button)findViewById(R.id.Button01);       
        // クリックされた時のリスナーを設定
        mButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                ((Button)v).setText("Clicked!");
            }
        });

ちなみにButtonコントロールを使用する時は「import android.widget.Button」でボタンコントロールを、OnClickListenerを使用する時は「import android.view.View.OnClickListener」でクリックリスナーをインポートする必要があります。

ボタン

ボタンは、画面構成ファイルであるmain.xmlに以下のようにタグを指定し、コードにボタン押下時の処理内容を記述します。


<Button android:onClick="button01ClickHandler" android:text="@string/hello" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

Buttonタグはその名の通り、ボタンを配置するタグです。
onClickはボタンを押した時のイベントを指定します。
textはボタンに表示する文字列を指定します。上の例の場合、"@string/hello"となっていますが、リソースファイルからhelloという名前を持つ文字列を取り出すための指定子です。
リソースファイルはstrings.xmlというファイル名で、以下のようになっています。


    <string name="hello">Hello World, MainActivity!</string>

上の例の場合、リソースファイル(strings.xml)から「Hello World, MainActivity!」という文字列が取り出されるので、ボタンには「Hello World, MainActivity!」という文字列が表示されます。

id="@+id/Button01"というのは、処理からmain.xmlファイルを参照する時に、どのコントロールを取得するかのIDです。以下はコントロール取得時のソースコードの例です。


        mButton = (Button)findViewById(R.id.Button01);



    public void button01ClickHandler(View v) {
        ((Button)v).setText("Button01 Clicked");
    }

「findViewById」でコントロールの取得を指定します。
R.id.Button01というのが、画面のレイアウトファイル(main.xml)からButton01というIDを持つコントロールを取得する指定です。

下段に「button01ClickHandler」というメソッドがありますが、これがボタンが押された時のイベントハンドラです。

Android開発の基本

Androidはメインになる画面構成をXMLで定義し、画面を操作した時の動作をJava等で組み込みます。

ここら辺の仕組みはSilverlightと同じです。というか、仕組み自体のアイデアはこちらが先でしょうか。
ちなみにSilverlightは画面構成をXAMLというXMLの一種で定義して、C#等の.Net言語で処理を実装します。

Androidって何?

Androidとは、Google社が開発したOSの名前です。

AppleのiPhon OSであるIOSに対抗心丸出しで出てきました。

IOSと異なり、自由度は抜群に高く、どのハードウェアでもAndroid OSが稼働していればそれはAndroid端末です。

カーネルはLinuxだそうです。開発は今のところJavaが主流で、一部ネイティブC等でも開発は可能なようです。

開発環境はLinux、Windows、Mac OSのどれでもできます。

基本Javaなので、JavaのSDKやAndroid SDK、Eclipse等の統合開発環境が必要です。

筆者は基本的にC,C++,C#系の開発者なので、不慣れな所がありますが温かく見守って頂けると嬉しいです。