Androidプログラミングに挑戦2!(13)単位変換アプリを作る(その4)

0
    JUGEMテーマ:プログラミング

    今回は、前回挙げた課題の前半、変換する単位と方向をまとめて1つのスピナーに入れると、組み合わせが多くなって見づらい件について、改善を図りたいと思います。

    構想はこうです。
    ・1つのスピナーで表示するのを止める。
    ・入力と出力の単位をスピナーで選べるようにする。
    ・入出力の単位に応じて自動的に換算するようにする。

    この自動的に換算するやり方は、実は簡単です。
    まず何か1つ基準の単位を決めます。例えば重さだったらkgとか。
    ここで、各単位について、これを掛けたらkgになる、という値を設定しておきます。例えばlb(ポンド)なら0.4536、「貫」なら3.75です。もちろんkgの場合は1です。
    そして入力と出力を選んだとき、例えばlbから貫に変換したいとき、まずlbの係数を掛けてkgにします。そしたら次に貫の係数で割るとkgが貫になり、無事lb→貫の換算ができると言う訳です。

    早速やってみましょう。
    レイアウトはこんな感じです。


    以前あった「入力:」「出力:」の文字は、無くても判りそうなので消しました。
    入出力エリアそれぞれに対し、単位を表示するスピナーを1つずつ設置してあります。
    xmlはこうなります。
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.tetsuya.unitconverter3.UnitConverter3">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:weightSum="1"
            android:layout_alignParentTop="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:id="@+id/linearLayout">
            <EditText
                android:layout_width="@dimen/ioWidth"
                android:layout_height="wrap_content"
                android:inputType="numberDecimal"
                android:ems="10"
                android:id="@+id/editText" />
            <Spinner
                android:layout_width="@dimen/unitWidth"
                android:layout_height="wrap_content"
                android:id="@+id/spinner"
                android:entries="@array/unit"
                android:spinnerMode="dropdown" />
        </LinearLayout>
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/linearLayout"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:id="@+id/linearLayout2">
            <TextView
                android:layout_width="@dimen/ioWidth"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:text="@string/zero"
                android:id="@+id/textView" />
            <Spinner
                android:layout_width="@dimen/unitWidth"
                android:layout_height="wrap_content"
                android:id="@+id/spinner2"
                android:entries="@array/unit"
                android:spinnerMode="dropdown" />
        </LinearLayout>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/convert"
            android:id="@+id/button"
            android:layout_below="@+id/linearLayout2"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    </RelativeLayout>
    

    入出力エリアはそれぞれ単位スピナーと一緒にLinearLayoutに入れています。
    入出力エリアの幅は220dp、単位スピナーの幅は120dpの固定にしています。

    リソースも出しておきます。

    strings.xml
    <resources>
        <string name="app_name">UnitConverter3</string>
        <string name="convert">変換</string>
        <string name="zero">0.0</string>
        <string-array name="unit">
            <item>kg</item>
            <item>lb</item>
            <item>貫</item>
        </string-array>
    </resources>
    

    dimens.xml
    <resources>
        <!-- Default screen margins, per the Android Design guidelines. -->
        <dimen name="activity_horizontal_margin">16dp</dimen>
        <dimen name="activity_vertical_margin">16dp</dimen>
        <dimen name="unitWidth">120dp</dimen>
        <dimen name="ioWidth">220dp</dimen>
    </resources>
    

    こんなところです。
    ではいよいよjavaをいじっていきます。
    いきなりですが、結論はこちら。
    package com.example.tetsuya.unitconverter3;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    // 中で使用するEditText, TextView, Viewをimport
    import android.widget.EditText;
    import android.widget.TextView;
    import android.view.View;
    import android.widget.Spinner;
    import android.widget.AdapterView.OnItemSelectedListener;
    import android.widget.AdapterView;
    public class UnitConverter3 extends AppCompatActivity {
        // 使用する変数等を定義
        EditText editText;
        TextView textView;
        double convRatioInput = 1.0;
        double convRatioOutput = 1.0;
        double inputValue = 0.0;
        double outputValue = 0.0;
        String input;
        Spinner unitSpinnerInput;
        Spinner unitSpinnerOutput;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_unit_converter3);
            // 入力エリアと出力表示エリアのインスタンスを取得
            editText = (EditText) findViewById(R.id.editText);    // 入力エリア
            textView = (TextView) findViewById(R.id.textView);    // 出力エリア
            unitSpinnerInput = (Spinner) findViewById(R.id.spinner);     // 入力単位スピナー
            unitSpinnerOutput = (Spinner) findViewById(R.id.spinner2);     // 出力単位スピナー
            // 変換ボタンのオンクリックリスナーを設定
            findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) { // ボタンクリック時の処理を定義
                    // 入力欄に記入されたテキストを取得
                    input = editText.getText().toString();
                    // 取得したテキストを数値に変換
                    if (!input.equals("")){
                        inputValue = Double.parseDouble(input);
                    }else{
                        inputValue = 0;
                    }
                    // 入力単位→出力単位に変換
                    outputValue = inputValue * convRatioInput / convRatioOutput;
                    // 変換した数値を文字列として出力エリアにセット
                    textView.setText(String.format("%.10g",outputValue));
                }
            });
            // 入力単位spinnerのアイテムセレクトリスナーを設定
            // リスナーを登録
            unitSpinnerInput.setOnItemSelectedListener(new OnItemSelectedListener() {
                // アイテムが選択された時
                public void onItemSelected(AdapterView<?> parent, View viw, int arg2, long arg3) {
                    int idx = unitSpinnerInput.getSelectedItemPosition();
                    switch(idx){
                        case 0: // kg
                            convRatioInput = 1.0;
                            break;
                        case 1: // lb
                            convRatioInput = 0.45359243;
                            break;
                        case 2: // 貫
                            convRatioInput = 3.75;
                            break;
                    }
                }
                // アイテムが選択されなかった
                public void onNothingSelected(AdapterView<?> parent) {
                }
            });
            // 出力単位spinnerのアイテムセレクトリスナーを設定
            // リスナーを登録
            unitSpinnerOutput.setOnItemSelectedListener(new OnItemSelectedListener() {
                // アイテムが選択された時
                public void onItemSelected(AdapterView<?> parent, View viw, int arg2, long arg3) {
                    int idx = unitSpinnerOutput.getSelectedItemPosition();
                    switch(idx){
                        case 0: // kg
                            convRatioOutput = 1.0;
                            break;
                        case 1: // lb
                            convRatioOutput = 0.45359243;
                            break;
                        case 2: // 貫
                            convRatioOutput = 3.75;
                            break;
                    }
                }
                // アイテムが選択されなかった
                public void onNothingSelected(AdapterView<?> parent) {
                }
            });
        }
    }
    

    それでは、変わったところを解説してゆきます。
    まず、15,16行目、換算係数が、インプット用とアウトプット用の2つになりました。
    20、21行目、スピナーも2つになっています。
    29、30行目、その2つのスピナーのインスタンスを取得しています。
    44行目、ここがポイントです。以前は変換係数を1つ掛けるだけでしたが、今回は、インプット用を掛けて、アウトプット用で割って換算しています。
    46行目、出力をフォーマットで出すように見直しました。「g」の識別子は、通常は小数で表示し、表示しきれないほど桁が増えたり逆に小さくなったら自動的に指数表示にしてくれる優れものです。「10」は有効数字10桁という意味です。
    51〜70行目、1つ目のスピナーのリスナーを設定しています。選ばれた単位に応じて、「それをkgに変換する係数」を設定しています。
    同様に73〜92行目で、2つ目のアウトプット側のスピナーのリスナーを設定しています、が、中身はインプット側と全く同じです。違うのはリスナーの名前だけですね。

    こうして出来上がったのがこちらです。



    単位を選んで変換をクリックするだけで、自由自在に変換してくれるようになりました。
    あとは単位を充実させてやればいいだけです。


    今回はここまで。次回は重さ、速度、長さなどのカテゴリーを選ぶと、単位のスピナーの中身が自動的に切り替わる仕組みを作っていきたいと思います。


    Androidプログラミングに挑戦2!(12)単位変換アプリを作る(その3)

    0
      JUGEMテーマ:プログラミング

      今回も単位変換アプリをブラッシュアップしていきましょう。
      新しいテーマですが、今度はポンド→キログラムだけでなく、キログラム→ポンドも変換できるようにしてみたいと思います。要件を整理すると次の通りです。
      ・入力欄に入力した数値を単位変換して出力欄に表示する(従来通り)
      ・変換ボタンをタップしたときに変換操作を行う(従来通り)
      ・ドロップダウンメニューで変換方向を選択する(新機能)
      ・変換方向を選択すると同時に、入出力欄の右の単位表示も切り替える(新機能)
      ・入力欄が空の状態で変換ボタンをタップすると、出力欄に0が表示される(?)

      こう考えると、変換操作に関する部分は前回のまま使えそうです。新しくドロップダウンメニューを追加し、アイテムを選択すると同時に画面表示や変換係数を切り替える機能を追加すればよさそうです。
      なお、最後の項目は前回の積み残し、検証漏れです。今回併せて実装していきます。

      ではまず、レイアウトから。
      ドロップダウンメニューは、「スピナー」というウィジェットを使います。
      まず、LinerLayout(Horizontal)の中に、変換ボタンとこのスピナーを配置します。



      青い線で囲まれているのがスピナーです。
      レイアウトはこれだけです。なんと簡単!
      あともう一つ、ちょっと修正したい部分があります。入出力欄の長さが微妙に違うのが気になるのです。さらに変換ボタンをおして中に数値が表示されるとさらに大きさがずれ、単位の位置がぴょこっと動くのです。気になります。
      これは入出力欄の幅の設定が良くないために起こった現象です。
      レイアウトエディターで出力エリアのプロパティを見てみると、layout:widthがwrap_content、そしてlayout:weightに0.81という値が設定されていました。前者は「中身に合わせて幅を調整しなさい」という意味、後者はレイアウト枠内での他のコンポーネントとの幅の比率を指定するためのプロパティです。何となく2重指示になっていて、実際の優先順位がどうなっているかによって表示が予測できない、そして中の文字の長さが変わるとエリアの大きさも変わるので、隣に書かれている単位の文字がぴょこぴょこ動く、ということになっていたわけです。
      そこで、まずlayout:weightの値を消し、layout:widthに具体的な数字を設定してやることにします。
      レイアウトエディターでlayout:widthの欄をクリックし「…」をクリックします。
      表示されたダイアログで一番下の「New Resource」をクリックしたら表示される「New dimen Value」をクリック。
      更に表示されたダイアログで、Resource nameを「iowidth」、Resource valueを「180dp」と入力してOKをクリックします。



      同じことを入力欄についてもやってやります。今度は「New Resource」ではなく、表示されたリストの中に先ほど設定した「iowidth」があるはずなので、それを選択してやればOKです。
      これで入力と出力の欄の幅が等しく固定され、単位の表示がピコピコ動くことはなくなりました。


      続いてドロップダウンメニューの中身を定義していきましょう。
      これは、res¥values¥strings.xmlに直接書き込んでいきます。
      <resources>
          <string name="app_name">UnitConverter2</string>
          <string name="input">入力:</string>
          <string name="inputUnit">lb</string>
          <string name="output">出力:</string>
          <string name="initialOutput">0.0</string>
          <string name="outputUnit">kg</string>
          <string name="convert">変換</string>
          <string name="unit1">lb</string>
          <string-array name="menu">
              <item>lb → kg</item>
              <item>kg → lb</item>
          </string-array>
      </resources>
      

      9行目までは今までと一緒です。10〜13行目、「string-array」として定義されているのがドロップダウンメニューのアイテムになります。このstring-arrayをspinner側で呼び出してやります。具体的には、レイアウトエディターで「entries」のプロパティに「@array/menu」と打ち込んでください。



      上の図で、右の方の青い部分です。

      これが済んだらjavaを記入していきます。
      package com.example.tetsuya.unitconverter2;
      import android.support.v7.app.AppCompatActivity;
      import android.os.Bundle;
      // 中で使用するEditText, TextView, Viewをimport
      import android.widget.EditText;
      import android.widget.TextView;
      import android.view.View;
      import android.widget.Spinner;
      import android.widget.AdapterView.OnItemSelectedListener;
      import android.widget.AdapterView;
      public class UnitConverter2 extends AppCompatActivity {
          // 使用する変数等を定義
          EditText editText;
          TextView textView4;
          TextView textView2;
          TextView textView5;
          double conversionRatio = 0.45359243; // lbs→kgの変換係数を初期値に
          double inputValue = 0;
          double outputValue = 0;
          String input;
          Spinner menuSpinner;
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_unit_converter2);
              // 入力エリアと出力表示エリアのインスタンスを取得
              editText = (EditText) findViewById(R.id.editText);     // 入力エリア
              textView4 = (TextView) findViewById(R.id.textView4);    // 出力エリア
              textView2 = (TextView) findViewById(R.id.textView2);    // 入力側単位表示
              textView5 = (TextView) findViewById(R.id.textView5);    // 出力側単位表示
              menuSpinner = (Spinner) findViewById(R.id.spinner);     // メニュースピナー
              // 変換ボタンのオンクリックリスナーを設定
              findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) { // ボタンクリック時の処理を定義
                      // 入力欄に記入されたテキストを取得
                      input = editText.getText().toString();
                      // 取得したテキストを数値に変換
                      if (!input.equals("")){
                          inputValue = Double.parseDouble(input);
                      }else{
                          inputValue = 0;
                      }
                      // 入力単位→出力単位に変換
                      outputValue = inputValue * conversionRatio;
                      // 変換した数値を文字列として出力エリアにセット
                      textView4.setText(String.valueOf(outputValue));
                  }
              });
              // spinnerのアイテムセレクトリスナーを設定
              // リスナーを登録
              menuSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
                  // アイテムが選択された時
                  public void onItemSelected(AdapterView<?> parent, View viw, int arg2, long arg3) {
                      int idx = menuSpinner.getSelectedItemPosition();
                      switch(idx){
                          case 0:
                              conversionRatio = 0.45359243;
                              textView2.setText(R.string.inputUnit);
                              textView5.setText(R.string.outputUnit);
                              break;
                          case 1:
                              conversionRatio = 2.20462233;
                              textView2.setText(R.string.outputUnit);
                              textView5.setText(R.string.inputUnit);
                              break;
                      }
                  }
                  // アイテムが選択されなかった
                  public void onNothingSelected(AdapterView<?> parent) {
                  }
              });
          }
      }
      
      前回から変わった部分を解説します。
      まず8〜10行目、スピナー関連で使用するモジュールをインポートしておきます。
      次に15、16行目、TextViewの宣言が追加されていますが、これは、入出力欄の右端の単位を表示している部分です。メニュー操作と同時に書き換えられるように、変数として定義しています。
      そして18、19行目は初期値0を与えておくように変更しています。
      それから21行目がspinnerのインスタンス用変数定義です。

      29〜31行目、入出力欄の単位表示とスピナーのインスタンスを取得します。

      33〜49行目が、変換ボタンをクリックしたときのリスナーです。
      39〜43行目、以前は40行目の一文だけだったのですが、それだと入力欄未入力状態で変換ボタンをクリックしてしまうと、数値ではないため、エラーが出て処理が止まってしまう問題がありました。そこで、入力欄が空かどうかをチェックすることで、これを回避するようにしています。

      そして52〜72行目、これが新しく設置したスピナーでアイテムが選択されたときの処理を定義するリスナーです。
      55行目で、メニューで選択されたアイテムのインデックスを取得しています。インデックスは一番上が0で、下に行くと1づつ大きくなってゆく整数で与えられます。今回は2つしかメニューアイテムを定義していないので、0か1になるはずです。
      56〜67行目が、このインデックス番号で場合分けして処理を行うswitch文です。書式は見ての通りです。それぞれのidxの値に応じてcase**:の部分にジャンプし、break;でswitch文を抜けるようになっています。それぞれの中で、変換係数の設定と単位表示の切り替えを行っています。
      換算結果を表示するのはあくまで変換ボタンを押したとき、ということでここでは変換操作は行いません。


      以上で、出来上がり。あとは動作を確認しながら入力ミスが無いかチェックしていきます。
      うーん、想定通りにばっちり出来上がりました☆


      うん、イメージ通りにはできたのですが、それはそれとしてまだ少し不満な部分もあります。
      例えば、ドロップダウンメニューの部分。今は変換する単位が2つだからいいですが、これが3つになると、メニューアイテムは6つに増えます。単位が4つだと12通り、5つだと20通りと級数的に増えてゆきます。目的の単位をメニューから探すだけで一苦労です。
      それから、重さ、長さ、速度、等の系統ごとにドロップダウンメニューの中身が切り替わるようにしてやると、ずいぶん見やすさが違うんじゃないかと思います。
      ここまでたどり着けば、誰に見せても恥ずかしくない、立派なアプリになると思うんです。

      次回以降はこれらの課題に取り組んでいきたいと思います。


      Androidプログラミングに挑戦2!(11)単位変換アプリを作る(その2)

      0
        JUGEMテーマ:プログラミング

        続きです。
        最初に、これまでの操作でどんなコードが生成されているか、確認しておきましょう。

        まずは、画面レイアウトを定義している、layout/activity_unit_converter1.xml
        <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            tools:context="com.example.tetsuya.unitconverter1.UnitConverter1">
        
            <LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:id="@+id/linearLayout">
        
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="@string/input"
                    android:id="@+id/textView" />
        
                <EditText
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:inputType="numberDecimal"
                    android:ems="10"
                    android:id="@+id/editText"
                    android:layout_weight="1" />
        
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="@string/lbs"
                    android:id="@+id/textView2" />
            </LinearLayout>
        
            <LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/linearLayout"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:weightSum="1"
                android:id="@+id/linearLayout2">
        
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="@string/output"
                    android:id="@+id/textView3" />
        
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="@string/initialValue"
                    android:id="@+id/textView4"
                    android:layout_weight="0.99" />
        
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="@string/kg"
                    android:id="@+id/textView5" />
            </LinearLayout>
        
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/convert"
                android:id="@+id/button"
                android:layout_below="@+id/linearLayout2"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true" />
        </RelativeLayout>
        
        

        LinearLayoutに囲まれた入力行と出力行、そして変換ボタンが定義されています。
        続いて文字を定義しているvalues/strings.xml
        <resources>
            <string name="app_name">UnitConverter1</string>
            <string name="input">入力:</string>
            <string name="lbs">lbs</string>
            <string name="output">出力:</string>
            <string name="initialValue">0</string>
            <string name="kg">kg</string>
            <string name="convert">変換</string>
        </resources>
        
        

        画面表示に使われている文字が全て定義されているのが判ると思います。

        それでは、次はjavaのプログラムを入力していきましょう。
        UnitConverter1.javaです。
        package com.example.tetsuya.unitconverter1;
        
        import android.support.v7.app.AppCompatActivity;
        import android.os.Bundle;
        // 中で使用するEditText, TextView, Viewをimport
        import android.widget.EditText;
        import android.widget.TextView;
        import android.view.View;
        
        public class UnitConverter1 extends AppCompatActivity {
        // 使用する変数等を定義
            EditText editText;
            TextView textView4;
            double conversionRatio=0.45359243; // lbs→kgの変換係数
            double inputValue;
            double outputValue;
            String input;
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_unit_converter1);
        
                // 入力エリアと出力表示エリアのインスタンスを取得
                editText  = (EditText) findViewById(R.id.editText);
                textView4 = (TextView) findViewById(R.id.textView4);
        
                // 変換ボタンのオンクリックリスナーを設定
                findViewById(R.id.button).setOnClickListener(new View.OnClickListener(){
                    @Override
                    public void onClick(View v){ // ボタンクリック時の処理を定義
                        // 入力欄に記入されたテキストを取得
                        input = editText.getText().toString();
                        // 取得したテキストを数値に変換
                        inputValue = Double.parseDouble(input);
                        // lbs→kgに変換
                        outputValue = inputValue*conversionRatio;
                        // 変換した数値を文字列として出力エリアにセット
                        textView4.setText(String.valueOf(outputValue));
                    }
                });
            }
        }
        

        書き加えた部分を解説してゆきます。
        まず6〜8行目、中で使用するwidgetとviewを読み込んでいます。
        12〜17行目、今度は使用する変数と定数を定義しています。
        25〜26行目、入力を受け取ったり出力を書き込んだりと、色々な操作を行う対象のeditTextとtextViewのインスタンスを取得しています。こうすることで、これらの対象をメソッドで操作できるようになります。
        一番難しいのが、29行目。ここではボタンにオンクリックリスナーインタフェースを実装しています。オンクリックリスナーとはクリックされるかどうか聞き耳を立てる機能で、クリックされると「onClick」メソッドが実行されます。
        30〜40行目がそのonClickメソッドの内容です。具体的には、
        33行目:入力欄に書き込まれた文字を文字列として取得する
        35行目:取得して文字列を数値に変換
        37行目:数値に変換した入力値に変換係数を掛けて単位を換算する
        39行目:換算した数値を文字列として出力欄に書き出す。
        となります。

        それでは、これでビルドして、実際にエミュレータ上で動かしてみましょう。
        Android Studioの上のメニューにある三角マーク(実行)か、緑のムシマーク(デバッグ)をクリックします。
        エミュレータを指定してやると、エミュレータが起動され、コンパイルされたアプリがエミュレータ上で動き始めます。
        最初の画面表示はこんな感じです。

        uc028.png

        思わずテンキーで数字を入力しようとしたら、冷たく無反応を食らいました・・・
        スマホなんですからタップですよね。タップ代わりに入力欄をクリックすると、下にテンキーが表示されました。

        uc029.png

        このテンキーをクリックすることで、数字を入力してゆきます。

        uc030.png

        そして最後に「変換」をクリックすると、見事!変換結果が出力欄に表示されました。

        uc031.png


        以上で、Hello World!に次ぐ簡単アプリ第2段、単位変換アプリが無事完成しました。

        次回は、この単位変換アプリを少しずついじって、機能を向上させていきたいと思います。



        calendar

        S M T W T F S
          12345
        6789101112
        13141516171819
        20212223242526
        2728293031  
        << October 2019 >>

        アクセスカウンタ

        合計:
        今日:
        昨日:

        selected entries

        categories

        archives

        recent comment

        • ホームページをリニューアルするの巻(19)−Googleウェブサイト翻訳ツールを組み込む
          てちくん
        • ホームページをリニューアルするの巻(19)−Googleウェブサイト翻訳ツールを組み込む
          てちくん
        • ホームページをリニューアルするの巻(19)−Googleウェブサイト翻訳ツールを組み込む
          小田きく江
        • ロリポブログでGoogleにサイトマップを登録する際の注意事項
          てちくん
        • ロリポブログでGoogleにサイトマップを登録する際の注意事項
          suraugi
        • いそべぇのペーパークラフトを作る(初級編)(12)
          てちくん
        • いそべぇのペーパークラフトを作る(初級編)(12)
          だべえ
        • noomでマイナス12kgのダイエットに成功!
          Yoko

        recommend

        recommend

        recommend

        ドール デザートメーカー ヨナナス901
        ドール デザートメーカー ヨナナス901 (JUGEMレビュー »)

        結構高いんです、でも欲しいんです!

        links

        profile

        書いた記事数:173
        最近の更新日:2017/01/30

        search this site.

        others

        mobile

        qrcode

        powered

        無料ブログ作成サービス JUGEM

        Google Adsense

        楽天ブックス

        楽天