XMLとAndroidの連携

| コメント(0)

 前回、main.xmlでレイアウトを作成した。簡単なプログラムを作って、androidへのレイアウト取り込みを考えてみた。

 基本的には、下記の順になる。(main.xmlにはボタンを2個配置してある)

public class MainActivity extends Activity implements OnClickListener {
    private Button btn1;
    private Button btn2;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //オブジェクト取得   
        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
        //リスナーセット
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
    }

    public void onClick(View v) {
        //押されたボタンによって分岐する
        switch(v.getId()) {
            case R.id.btn1:
                //処理1
                break;
            case R.id.btn2:
                //処理2
                break;
        }      
     }
}

上記の場合、ボタンは2個ですが、ボタンがもっと多くあればどうするか?

id を  for 文で割り当てれば間単になります。

①まず、フィールドにボタンの数だけIDを記述。
    int[] contentR={R.id.btn1,R.id.btn2,R.id.btn3,R.id.btn4,R.id.btn5,R.id.btn6,R.id.btn7};
② onCreate にfor文でidの設定をする。
      for (int i=0;i<contentR.length;i++) {  
           button = (Button) findViewById(contentR[i]);
     button.setId(i);
           button.setOnClickListener(this);
      }

さらに多くのボタンがあればどうする?詳しくは 下の 続きを読む で。

---------------------------------------------------------------------------------------------------

さらに多くのボタンがあればどうする? (onClick 内の case 文を短くしたい)

例1)電卓のボタンのような場合は、getText でボタンに貼り付けたText文字を直接引き出す。
    public void onClick(View v) {
    Button btn = (Button)v;
        bnumber = (String) btn.getText();  //bnumberは押されたボタンの文字列0~9が入る

例2)碁盤の目のような場合は、割り当てる ID から x、y を求める。

test14.bmp

   ①int btnList[] = {R.string.btn_1_1,R.string.btn_1_2,R.string.btn_1_3,
                               R.string.btn_2_1,R.string.btn_2_2,R.string.btn_2_3};

      ②onCreate にfor文でidの設定をする。
        for (int i=0;i<btnList.length;i++) {  
                button = (Button) findViewById(btnList[i]);
                button.setId(i);
                button.setOnClickListener(this);
           }
      ③public void onClick(View v) {
                Button btn =(Button) v;
               //ボタンのIDから配列を取得[x][y]
               int x = Integer.parseInt(getResources().getString(btn.getId()).substring(4,5))-1;
               int y = Integer.parseInt(getResources().getString(btn.getId()).substring(6,7))-1;
       もし、btn_2_3 が押され場合、x=2、y=3 となる。  

ポイントは、通常 ボタンの設定は R.id.btn2_3 のように Id を割り当てますが、これではボタンの Id を変数に入れられません。

そこで、values の strings.xml にボタンの名前を先に登録して置き、これをさらに Id に割り当てております。

説明よりも実際のプログラムをご覧ください。マルバツゲームです。
2人が ○ と × を交互に置き、3個並べば"勝"という単純なゲームです。

 MaruBatu.lzh

string.xml に ID が登録してあるのがミソです。

 
<<神戸でHP作成&個人レッスンなら http://petafield.com まで>>

コメントする