Android ボタン作成の実装解説動画4パターン

Android 2.3.1で「ボタンが2つあるアプリ」を例に、4つの実装パターンを動画にしてみました。Eclipseの使い方も順番に説明しているので、最初からみた方が理解しやすいかもしれません。今回は、XMLを利用する方法のみ解説しています。javaだけで書くこともできます。


ボタンが2つあるアプリを作る準備の巻 [Android プログラミング](5:29)

  1. Android APIの設定
  2. Android プロジェクトを作る
  3. Eclipseのワークベンチ
  4. Javaパースペクティブ Java DDMS デバッグ

パースペクティブボタンの上で[右クリック]-「別名保管」を選ぶと好きなレイアウトを保存しておける説明も追加した方が親切ですね。





ボタンが2つあるアプリその1 [Android プログラミング](16:18)

  1. final
  2. 匿名インナークラスのカッコの対応
  3. 匿名なので、名前を考える必要なし
匿名インナークラスを利用すると、ボタンごとにonClick()を書くので条件分岐する必要がないです。ただ、今回は関係ないのですが、後々階層が深くなるためActivityを取得するとき、単純にthisとかではダメになります。Button01Activity.this ( 親クラス.this )などと親子関係を考慮する場面にでくわします。


package net.kaneta.button01;

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

public class Button01Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button1 = (Button) findViewById(R.id.button1);
        Button button2 = (Button) findViewById(R.id.button2);
        final TextView textview = (TextView) findViewById(R.id.textView1);

        button1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                textview.setText("何か書く");
            }
        });

        button2.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                textview.setText("");
            }
        });

    }
}
   



ボタンが2つあるアプリその2 [Android プログラミング](17:21)

  1. implements OnClickListener
  2. フィールド private TextView textview
  3. getId()
  4. Eclipse 画面分割
onClick() で条件分岐させる必要があります。

package net.kaneta.button02;

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

public class Button02Activity extends Activity implements OnClickListener{
    private TextView textview;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button b1 = (Button) findViewById(R.id.button1);
        Button b2 = (Button)findViewById(R.id.button2);
        textview = (TextView) findViewById(R.id.textView1);
        
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);    
    }

    public void onClick(View v) {
        switch (v.getId()){
        case R.id.button1:
            textview.setText("何か書く");
            break;
        case R.id.button2:
            textview.setText("");
            break;
        }
        
    }
}





ボタンが2つあるアプリその3 [Android プログラミング](17:06)

  1. 定数 private static final
  2. switch文の分岐とint
  3. setTag() と getTag()
タグで条件分岐するので工夫の余地があります。switch文で定数がラベルの役目を果たし読みやすいです。XMLでタグを指定することもできます。

package net.kaneta.button03;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Button03Activity extends Activity implements OnClickListener{
    private static final int SET = 0;
    private static final int CLEAR = 1;
    private TextView textview;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button b1 = (Button) findViewById(R.id.button1);
        Button b2 = (Button) findViewById(R.id.button2);
        textview = (TextView) findViewById(R.id.textView1);
        
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
        
        b1.setTag(SET);
        b2.setTag(CLEAR);        
    }

    @Override
    public void onClick(View v) {
        switch((Integer)v.getTag()){
//      switch(Integer.parseInt(v.getTag().toString())){
        case SET:
            textview.setText("正解!");
            break;
        case CLEAR:
            textview.setText("残念、、、");
            break;
        }
        
    }
}




ボタンが2つあるアプリその4 [Android プログラミング](11:17)

  1. xml に書いた Android:onClick() で呼ぶメソッドを指定
  2. わかりやすいメソッド名の必要性
XMLで完結する感じです。ラクですね。

package net.kaneta.button04;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class Button04Activity extends Activity {
    private TextView textview;

 /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        textview = (TextView) findViewById(R.id.textView1);
    }
    
    public void onClickSet(View v){
        textview.setText("何か書く");
    }
    
    public void onClickClear(View v){
        textview.setText("");
    }
}




利用したソフトの紹介など

私は、2011年7月くらいにAndroidのプログラムを始めました。9月に写真集アプリをマーケットに登録し、12月現在第2段を作成中です。その間に、多くの書籍や動画のお世話になりました。

特に、動画はわかりやすく勉強になりました。書籍ですと公正された正しい手順が示されますが、動画ですと解説者のミスも含めて勉強になります。(ここ重要です)

私は以前修正の容易さから、ViewletBuilderを使って動画教材を作っていました。ViewletBuilderは、見た目は完璧なものができるのですが、いざ習得してもらおうと思うとなかなか難しかったです。納品しても実際はあまり再生・利用されないことが良くありました。(きれいな動画マニュアルを作るにはおすすめです)

そのままパソコン画面を録画するCamtasia StudioやBB FlashBackなどは失敗の修正が大変というか取り直しになりますが、良くも悪くも参考になると感じでいます。記憶に残り易い感じです。

それにしても気軽にスクリーンキャスト動画をYouTubeなどへ登録できるようになりましたね。環境はそろって、あとはコンテンツだけ、、、ちなみに、今回の動画は長すぎます。内容を絞って7分くらいにしたいところです。

なお、この投稿の内容は後日、よちよちAndroidラーニングサイトhttp://yochiand.corcocu.net/ にまとめる予定です。

最後に、いつも利用させていただいているスクリーンキャスト撮影の決定版ソフトを紹介しておきましょう。以前にも書きましたが、ディスプレイドライバとして動画をキャプチャするらしく軽い動作が素晴らしいです。

BB FlashBack
http://www.bbflashback.jp/
BB FlashBack 3日本語版がでました!


このブログの人気の投稿

mp3ファイルをcat で結合する方法

故障したPixio PXC32の修理対応が神対応だった

『THIS IS US/ディス・イズ・アス 36歳、これから』は2010年代の『ナイスサーティーズ』