SyntaxHighlighter

2010年9月30日木曜日

未来へ行くなら、アンドロイドを待て。

最近、KDDIがテレビでやっているCMのキャッチコピー
であるが最後の「待て」は「持て」ではないのでしょうか?

それとも、かっちょいい製品がでるまで、待ってちょうだい
ということなのでしょうか?

聞いてみなければわかりませんが、なんか期待を持たせるCMです。
おおいに期待して待ってみたいと思います。

2010年9月29日水曜日

Android解説 layout その5

Android layout 

event listener(イベントリスナー)

Androidではwidgetウィジェット)に対して、個々にイベント発生を知ることができます。イベントリスナーというのは、イベントが発生したときに呼び出されるメソッドを持っているオブジェクトのことです。Listenerクラスを事前にインポートしておく必要があります。
下記例は、「ボタンがクリックされた」というイベントですが、データが更新された、端末の縦横が変わった等、イベントにより「listener」が変わります。
     import android.view.View;
     import android.view.View.OnClickListener;
     btn_entry.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
      entryResult();
}
    });
最初の2行にあるimportが必要なクラスで「android.view.View.OnClickListener」は「android.view.View」を継承するクラスです。Javaの技術的な話もAndroidを利用してできないかなと考えていますが、今は、セットものとして覚えてください。
次の行は、ボタンがクリックされたというイベントが発生したときに「public void onClick(View v)」という実装クラスが処理を行います。これもセットものとして理解してください。
entryResult();は、自分で定義した関数です。
ここまでのソース中、独自項目は、この1行のみということです。
最後の「});」までが、イベント処理となっています。

では、ソース全文と実行結果をみてください。




課題として

・ラジオボタンのデフォルト設定の方法
・テキストボックスの非表示のしかた
が残りました。解決方法がわかりましたら、紹介したいと思います。


package jp.co.aicell;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.view.View;
import android.view.View.OnClickListener;

public class HelloAndroidActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        /* ボタン イベントが発生 */
        final Button btn_entry = (Button) findViewById(R.id.btn_entry);
              btn_entry.setOnClickListener(new OnClickListener() {
               public void onClick(View v) {
                      entryResult();
               }
        });
    }
       private void entryResult() {
              String entry_Naiyo;
              /* テキストボックスの値取得 */
              final EditText text_name = (EditText) findViewById(R.id.text_name);
              entry_Naiyo="あなたは"+text_name.getText().toString()+"さんで";
             
              /* チェックボックスの値取得 */
              final CheckBox ck_android = (CheckBox) findViewById(R.id.ck_android);
              if (ck_android.isChecked())
                     entry_Naiyo=entry_Naiyo + "Androidに興味がある";
              else
                     entry_Naiyo=entry_Naiyo + "Androidに興味がない";
             
              /* ラジオボタンの値取得 */
              final RadioGroup rg_sex = (RadioGroup) findViewById(R.id.rg_sex);
              switch (rg_sex.getCheckedRadioButtonId()) {
              case R.id.rb_man:
                     entry_Naiyo=entry_Naiyo + "男性です。 ";
                     break;
              case R.id.rb_woman:
                     entry_Naiyo=entry_Naiyo + "女性です。 ";
                     break;
              }
             
              /* テキストボックスに値をセット */
              final EditText text_entry = (EditText) findViewById(R.id.text_entry);
              text_entry.setText(entry_Naiyo);
             
       }     
}

実行結果です。



2010年9月28日火曜日

Android解説 layout その4

findViewById項目の入力と出力)

いよいよ、プログラムに手を付けます。
今まで、作成した項目(テキストボックスやボタン等)はAndroidではwidgetウィジェット)と表現します。
widgetごとにクラスをimportしておく必要があります。
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioGroup;
これが今回使用する分ですが、「そんなのわかんね~よ」という場合にはEclipseの便利な機能を使用します。
下図を参照してほしいのですが、該当するwidgetが使用するクラスをimportしていないとエラーとなります。矢印の部分をクリックするとエラーの解決候補が画面に表示されます。
たいていの場合はimport忘れなので、赤枠の部分をダブルクリックすると、import文がソースに挿入されます。








では、実際の入出力のコーディングですが
final Button btn_entry = (Button) findViewById(R.id.btn_entry);
のように書きます。この例は画面上の「btn_entry」という名前のボタン情報を入力するコーディングです。テキストボックスの情報を得るには「Button」の部分を「EditText」に置き換えます。左側の変数「btn_entry」はワークエリアなので別に他の名前でもかまいません。右側の「btn_entry 」は「R.id.」にmain.xmlandroid:id="@+id/btn_entry"と設定した名称の「btn_entry」を付けなければなりません。
他のwidgetは下記のようになります。
final EditText text_name = (EditText) findViewById(R.id.text_name);
final CheckBox ck_android = (CheckBox) findViewById(R.id.ck_android);
final RadioGroup rg_sex = (RadioGroup) findViewById(R.id.rg_sex);

では、ワークエリアにセットされた値の取り出し方ですが、これは各widgetにより異なります。下記コーディングサンプルを参照してください。
       private void entryResult() {
              String entry_Naiyo;
              /* テキストボックスの値取得 */
              final EditText text_name = (EditText) findViewById(R.id.text_name);
              entry_Naiyo="あなたは"+text_name.getText().toString()+"さんで";
             
              /* チェックボックスの値取得 */
              final CheckBox ck_android = (CheckBox) findViewById(R.id.ck_android);
              if (ck_android.isChecked())
                     entry_Naiyo=entry_Naiyo + "Androidに興味がある";
              else
                     entry_Naiyo=entry_Naiyo + "Androidに興味がない";
             
              /* ラジオボタンの値取得 */
              final RadioGroup rg_sex = (RadioGroup) findViewById(R.id.rg_sex);
              switch (rg_sex.getCheckedRadioButtonId()) {
              case R.id.rb_man:
                     entry_Naiyo=entry_Naiyo + "男性です。 ";
                     break;
              case R.id.rb_woman:
                     entry_Naiyo=entry_Naiyo + "女性です。 ";
                     break;
              }
             
              /* テキストボックスに値をセット */
              final EditText text_entry = (EditText) findViewById(R.id.text_entry);
              text_entry.setText(entry_Naiyo);
             
       }     


最後の2行はテキストボックスに値を代入する方法です。
Javaでは、データの入出力に関して、下記のようなネーミングルールがありますので、コードを読むときに参考にしてください。
なお、「Xxxx」一文字目を大文字にするということを現しています。
・データを得る  getXxxx
・データを書く  setXxxx(またはputXxxxx


次回はイベントリスナー(event listener)についてです。






2010年9月27日月曜日

Android解説 layout その3

Android layout 

Layout(レイアウト)

今まで、作成した項目は縦に並んでいますが、これはデフォルト設定がそうなっているためです。横に並べるためには、以下の手順で行います。

レイアウトタブのレイアウトからLinearLayoutを黒い画面にドラッグします。










「名前」の項目を横に並べて見ましょう。
main.xmlを開くとタグができていますので、下記ソースを参考にして、TextViewEditTextをはさむように修正してください。
<LinearLayout android:id="@+id/LinearLayout01"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content">
       <TextView android:text="名前:"
                     android:id="@+id/label_name"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content">
       TextView>
       <EditText android:text="名前を入力してください。"
                     android:id="@+id/text_name"
                     android:layout_width="fill_parent"> ←変更
                     android:layout_height="wrap_content">
       EditText>
LinearLayout>
このソースに下記1行を追加します。また「LinearLayout01」も修正します。
<LinearLayout android:id="@+id/layout_name"
              android:orientation="horizontal" ←追加
android:layout_width="wrap_content"
              android:layout_height="wrap_content"

ソース解説
まず、今まで無視してきましたが、タグを作成すると、必ず生成されている2行についてです。
android:layout_width          横の長さ。
android:layout_height         縦の長さ。
を表しています。指定する値としては直接「数値」とすることもできます。
ほかに下記の指定方法があります。
fill_parent           横幅いっぱい。 (古い表現でmatch_parent
wrap_content          内容の長さに合わせる。

ちなみに、android:layout_width = “wrap_content”の状態で android:text="名前を入力してください。"android:text=""とすると表示されるテキストボックスは1文字分の大きさになります。横幅を画面いっぱいにするためにはandroid:layout_width = “fill_parent ”にします。

ほかにもテーブルレイアウトとかいろいろな設定があります。これらについてはまた機会をみて解説したいと思います。下図に実行結果を示します。
今回は性別のところも修正していますので、その部分のソースも参考にしてください。

     性別の部分のレイアウトです。結構長いソースになってしまいました。
<RadioGroup android:id="@+id/rg_sex"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" 
       android:orientation="horizontal">   ←横に並べる指定を追加
       <TextView android:text="性別:"     ←タイトル追加
              android:id="@+id/label_sex"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content">
       TextView>
       <RadioButton android:text="男性"
              android:id="@+id/rb_man"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content">
       RadioButton>
       <RadioButton android:text="女性"
              android:id="@+id/rb_woman"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content">
       RadioButton>
RadioGroup>


次回はいよいよ(やっと?)入力内容を受け取るプログラムになります。

注意として「EditText>」のように"<"と"/"がソース上なくなっています。
このソースをコピー貼り付けして実行するとエラーとなります。
適宜"<"と"/"を追加してください。

2010年9月24日金曜日

Android解説 layout その2

Android layout 

CheckBox(チェックボックス)とRadioGroup(ラジオグループ)

プロジェクト(HelloAndroid)からreslayoutmain.xmlを開きます。
レイアウトタブでビューからCheckBoxを黒い画面にドラッグします。












次にビューの中にRadioButtonがありますが、RadioButtonを単独で使用することはないと思われますので、RadioGroupの設定を記述します。
今度はビューではなくレイアウトからRadioGroupを黒い画面にドラッグします。














作成したRadioGroupRadioButtonを設定します。今度はビューにあるRadioButtonを要素として必要分だけ黒い画面にドラッグします。
その後Eclipseのアウトラインにある「↑」「↓」を使用して所定の場所に移動させます。下図を参考にして試してください。
















main.xmlタブでソースを確認します。
<CheckBox android:text="@+id/CheckBox01"
              android:id="@+id/CheckBox01"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content">
CheckBox>
<RadioGroup android:id="@+id/RadioGroup01"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content">
              <RadioButton android:text="@+id/RadioButton01"
                     android:id="@+id/RadioButton01"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content">
              RadioButton>
              <RadioButton android:text="@+id/RadioButton02"
                     android:id="@+id/RadioButton02"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content">
              RadioButton>
RadioGroup>

ソース解説
内容としてはテキストボックスと設定方法は同じです。
項目の並び等はレイアウトとしてまとめて後ほど解説します。

今回は以下のように修正してみました。(アンダーライン部分)
<CheckBox android:text="Androidに興味がある?"
              android:id="@+id/ck_android"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content">
CheckBox>
<RadioGroup android:id="@+id/rg_sex"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content">
              <RadioButton android:text="男性"
                     android:id="@+id/rb_man"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content">
              RadioButton>
              <RadioButton android:text="女性"
                     android:id="@+id/rb_woman"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content">
              RadioButton>
RadioGroup>

実行結果は下図のようになります。
RadioGrouptextを付けれないのが“?”です。内部処理では「android:id="@+id/rg_sex」があるから問題ないと思いますがユーザーインタフェースとしては、別途TextViewを入れないといけませんね。