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

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

    新年あけましておめでとうございます。
    今年もつたない文章ではありますが、ぼちぼちアップしていきたいと思いますので、緩い感じでお付き合いください。

    今回は、最終形態に向けての展望を整理しつつ、データ入力作業を進めていきましょう。

    まずその最終形態を何と見据えるかです。
    1年の始まりでもありますのでここは大きく出て、Google Playでの公開を目指したいと思います!
    それに向けてはあと何をすればいいのでしょう?
    思いつくままに挙げてみましょう。
    ・カテゴリー、単位を充実させる。
    ・単位の説明を表示する。
    ・アイコンを作る。
    ・多言語対応にする。
    ・広告を入れる(広告なしの有料版も公開する)
    ・Google Playデベロッパーに登録する。
    ・アプリを公開する。

    なにやら壮大な計画になってきました。いい感じです。
    今日のところは以前からの予告通り、カテゴリー、単位の充実を行いたいと思います。

    まず、カテゴリーですが、前回は長さ、面積、体積、重さの4つだけ4でしたが、そこに密度、時間、速度、加速度、体積流量、質量流量、角度、角速度、角加速度、力、圧力、仕事、仕事率、温度の14カテゴリーを加えて、全部で18カテゴリーにしました。変換できる単位はそれぞれ次の通りです。
    長さ:m, km, cm, mm, μm, nm, Å, pm, in, ft, yd, mile, nmile, 毛, 厘、寸、尺、間、尋、町、里、AU、ly、pc(24個)
    面積:m2, a, ha, km2, cm2, mm2, in2, ft2, yd2, ac, mile2, 坪、畝、反、町(15個)
    体積:m3, cm3, mm3, L, dL, mL, cc, 小さじ、大さじ、カップ、in3, ft3, USfl.oz, USfl.pt, USfl.qt, USG, Imp.gal, USbu, Oil bbl, US bbl, Imp.bbl, 勺、合、升、斗、石、俵(27個)
    重さ:kg, g, mg, μg, ng, pg, fg, t, gr, dr, oz, lb, s/qr, s/t, l/t, 匁、両、斤、貫、kt(20個)
    密度:kg/m3, g/cm3, lb/ft3, lb/in3(4個)
    時間:s, ms, μs, ns, ps, fs, min, h, d, wk, mo, y, c(13個)
    速度:m/s, m/min, m/h, km/s, km/min, km/h, fps, fpm, fph, mps, mpm, mph, kt, M(14個)
    加速度:m/s2, ips2, fps2, mps2, g, Gal(6個)
    体積流量:m3/s, scch, sccm, sccs, sLm, sLs, in3/s, ft3/s, m3/h, galUS/s, galUK/s(11個)
    質量流量:kg/s, lb/s(2個)
    角度:rad, °, ′, ″, grad, mil, %(7個)
    角速度:rad/s, °/s, rps, rpm, Hz(5個)
    角加速度:rad/s2, °/s2, rps2(3個)
    力:N, dyn, kgf, lbf, pdl(5個)
    圧力:Pa, hPa, kPa, MPa, mbar, bar, kg/cm2, atm, Torr, mmHg, mmAq, inHg, psi(13個)
    仕事:J, kJ, MJ, erg, kgf・m, eV, cal, kcal, BTU, kWh, tTNT, HPh, PSh(13個)
    仕事率:W, kW, HP, PS, kgfm/s, ftlb/s, kcal/s, kcal/h, BTU/s(9個)
    温度:K, ℃、℉、°R(4個)

    一応一般的なものは一通り集めたつもりですが、このほかにもカテゴリーの追加や単位の追加のリクエストがありましたら、いつでも対応いたしますので、コメントよろしくお願いします。

    さてこれらの単位の中で、実際に換算してみようとすると今までの方式では換算できない単位がいくつか出てきました。今までの方式は、変換元の単位から基準単位に、その後基準単位から変換先の単位にそれぞれ変換係数を掛けて変換していました。ですが上記の単位の中に、変換係数を掛けるだけでは換算できない単位が出てきたんです。

    一つ目は、角度の「%」。よく道路標識にある、100m進む間に1m高くなったら勾配1%、というあれです。この勾配x%を角度に直すにはatan(x/100)(アークタンジェント)という逆三角関数を使って計算してやる必要があります。

    それから4つの温度。Kは℃+273.15となり、比例ではなくシフトです。またx℃とy℉の関係も、y=1.8x+32という数式で表されており、単純な比例になっていません。つまり0の点がずれているんですね。

    ただ、これらに対応する必要はあるのですが、その他大勢の単位たちは今までの基準単位を経由した比例方式で簡単に換算することができるので、全部を変えてしまうのはデメリットが大きいでしょう。ということで、基本は今まで通りの変換係数方式で、そして上に挙げた5つの単位の時だけif文で見分けて個別の変換を行ってやる、ということにしたいと思います。

    実際の変換はjavaで行っていますので、その部分を拡張しました。抜き出して以下に示します
    変換ボタンのOnClickListener部分です。
            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;
                    }
                    if (categoryNumber==10) { // 角度の場合
                        if (idxi==6) {
                            intermediateValue = Math.atan(inputValue/100);
                        } else {
                            intermediateValue = inputValue*convRatioInput;
                        }
                        if (idxo==6) {
                            outputValue = 100*Math.tan(intermediateValue);
                        } else {
                            outputValue = intermediateValue/convRatioOutput;
                        }
                    } else if (categoryNumber==17) { // 温度の場合
                        switch (idxi){
                            case 0:
                                intermediateValue = inputValue;
                                break;
                            case 1:
                                intermediateValue = inputValue + 273.15;
                                break;
                            case 2:
                                intermediateValue = (inputValue+459.67)/1.8;
                                break;
                            case 3:
                                intermediateValue = inputValue/1.8;
                        }
                        switch (idxo) {
                            case 0:
                                outputValue = intermediateValue;
                                break;
                            case 1:
                                outputValue = intermediateValue - 273.15;
                                break;
                            case 2:
                                outputValue = intermediateValue*1.8 - 459.67;
                                break;
                            case 3:
                                outputValue = intermediateValue*1.8;
                                break;
                        }
                    } else { // その他のカテゴリーの場合
                        // 入力単位→出力単位に変換
                        outputValue = inputValue * convRatioInput / convRatioOutput;
                    }
                    // 変換した数値を文字列として出力エリアにセット
                    textView2.setText(String.format("%.10g", outputValue));
                }
            });
    

    カテゴリーNo=10の「角度」の場合、インデックスidx*=6の場合のみatanを使った換算を行い、それ以外は換算係数を使って、一旦中間の基準単位に変換します。その後落ち着いて同じように基準単位から目的の単位に変換してやることにしました。
    カテゴリーNo=17の「温度」の場合も考え方は同じです。こちらは4つの温度それぞれで異なる換算をしてやる必要がありますので、if文ではなくswitch文で対応する換算式に飛ばすようにしています。

    これで機能的には完成しました。あとはまぁ飾りのようなものです。次回から一つ一つ、楽しみながらやっていくことにしましょう。
     


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

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

      前回お約束しました通り、スピナーのアイテムで上付き文字を使用する方法について調べてきました。
      まず、レイアウトで設定したままのスピナーであれば、strings.xmlに定義してあるstring-arrayで次のように書けば上付き文字を表示させることができます。
          <string-array name="category">
              <item>長さ<sup><small>2</small></sup></item>
              <item>面積</item>
              <item>体積</item>
              <item>重さ</item>
          </string-array>
      

      出力結果はこうなります。


      割とあっさりできました。
      参考にさせて頂いたのはこちらのサイトです。

      - Google Android - 雑記帳:Tips TextView を使いこなそう 〜 表示編 〜 その2

      その他の使用可能なタグ一覧も載っていますので、参考になると思います。


      しかし、この方法、途中で中身を切り替えられるようにした単位用スピナーではうまくいかないようです。
      コードはこうなっていました。
      String[] unitList;
      (中略)
      categoryNumber = categorySpinner.getSelectedItemPosition();
      switch (categoryNumber) {
          case 0: // 長さ
              unitList = getResources().getStringArray(R.array.unitListLength);
              break;
          case 1: // 面積
              unitList = getResources().getStringArray(R.array.unitListArea);
              break;
          case 2: // 体積
              unitList = getResources().getStringArray(R.array.unitListVolume);
              break;
          case 3: // 重さ
              unitList = getResources().getStringArray(R.array.unitListWeight);
              break;
      }
      adapter = new ArrayAdapter(getApplicationContext(),android.R.layout.simple_spinner_item, unitList);
      unitSpinnerInput.setAdapter(adapter);
      unitSpinnerOutput.setAdapter(adapter);
      
      単位リストを入れる配列「unitList」を冒頭で「String[]」で宣言していますが、これは6,9,12,15行目のgetResources().getStringArrayがstring[]しか受け付けてくれないためです。htmlタグ付きのStringはただのStringではなく「CharSequence」と呼ばれるものになるので、このやり方では通らなかったということでした。

      対応策はいくつかあるようですが、私がやってみてうまくいったのは、unitListをCharSequenceのArrayListとして宣言してやり、そこにその場で一行ずつ足していってやる方法です。
      実際にコードを見てもらった方が早いでしょう。
      @Override
      public void onItemSelected(AdapterView parent, View view, int position, long id) {
      categoryNumber = categorySpinner.getSelectedItemPosition();
      unitList  = new ArrayList<>();
      switch (categoryNumber) {
      case 0: // 長さ
      unitList.add("m");
      unitList.add("km");
      unitList.add("mile");
      break;
      case 1: // 面積
      unitList.add(Html.fromHtml("m<sup><small>2</small></sup>"));
      unitList.add("a");
      unitList.add("ha");
      break;
      case 2: // 体積
      unitList.add(Html.fromHtml("m<sup><small>3</small></sup>"));
      unitList.add("cc");
      unitList.add("L");
      break;
      case 3: // 重さ
      unitList.add("kg");
      unitList.add("lb");
      unitList.add("貫");
      break;
      }
      adapter = new ArrayAdapter(getApplicationContext(),R.layout.spinner_item, unitList);
      unitSpinnerInput.setAdapter(adapter);
      unitSpinnerOutput.setAdapter(adapter);
      convRatioInput = 1.0;
      convRatioOutput = 1.0;
      }
      
      ポイントは4行目でunitListを確保し、12行目と17行目でHtml.fromHtml()メソッドでタグを記入しているところです。こうしてやることで、切り替えたスピナーでも上付き文字を表示することができました。


      めでたしめでたし・・・・と思っていたら、何やら緊急事態が発生しました。

      単位スピナーの文字が表示されなくなってしまったのです!
      いや、よくよく見ると文字は書かれてはいるのですが色が真っ白になってしまって、全く見えない状態でした。
      そんな設定は何一ついじっていないので、今回ばかりは原因がわかりません。(もしかしたらSDKをアップデートしたせい・・・?)

      判らないと言っていては始まらないので、ここは強制的にスピナーの文字の色を指定しやることにしましょう。

      最初に試したのは、style.xmlのなかで、新しくandroid:spinnerItemStyleとandroid:spinnerDropDownItemStyleを定義しなおしてやることです。こんな感じに書いてやります。
       
      <resources>
          <!-- Base application theme. -->
          <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
              <!-- Customize your theme here. -->
              <item name="colorPrimary">@color/colorPrimary</item>
              <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
              <item name="colorAccent">@color/colorAccent</item>
              <item name="android:spinnerItemStyle">@style/SpinnerItemStyle</item>
              <item name="android:spinnerDropDownItemStyle">@style/SpinnerDropDownItemStyle</item>
          </style>
          <style name="SpinnerItemStyle" parent="android:Widget.Holo.Light.TextView.SpinnerItem">
              <item name="android:textSize">24sp</item>
              <item name="android:textColor">#000000</item>
          </style>
          <style name="SpinnerDropDownItemStyle" parent="android:Widget.Holo.Light.DropDownItem">
              <item name="android:textSize">24sp</item>
              <item name="android:textColor">#000000</item>
          </style>
      </resources>
      

      8,9行目で新たなスタイルを呼び出しています。11行目からがその新しいスタイルになっています。
      これはこちらのサイトを参考にさせていただきました。
      Y.A.M の 雑記帳:Android Spinnerの選択肢をXMLで指定する

      でもこれ実際にやってみたら、カテゴリースピナーには効くのですが、単位スピナーに効いてくれません・・・
      仕方がないので次の手を。

      先ほどのコードでArrayAdapterをセットする部分、こうなっていました。
      adapter = new ArrayAdapter(getApplicationContext(),R.layout.spinner_item, unitList);
      

      これ、前回のコードでは、
      adapter = new ArrayAdapter(getApplicationContext(),android.R.layout.simple_spinner_item, unitList);
      

      こうなっていたのです。前回のコードではデフォルトのレイアウトである「android.R.layout.simple_spinner_item」が呼ばれている部分が「R.Layout.spinner_item」に書き換わっています。これは自作のレイアウトファイルを呼び出すようにしているのです。

      自作のレイアウトファイルの中身はこうなっています。
      <?xml version="1.0" encoding="utf-8"?>
      <TextView
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:textSize="24sp"
          android:gravity="left"
          android:textColor="#000000"
          android:padding="5dp"
          />
      
      こんな形に、文字サイズと文字色、パディング等を指定しています。
      これで無事全部丸くおさまりました。

      できあがりはこんな感じです。


      いいんじゃないでしょうか☆?
      特に触れませんでしたが、今回実機でもデバッグしてやったところ、スピナーの縦の幅が狭くてタップしにくいということが判りましたので、今回はwrap_contentではなく高さを直接指定して、少し幅を広げてやっています。

      あとは変換できる単位とカテゴリーを充実させてやるだけです。

      次回は最終結果をお見せするつもりです。お楽しみに。


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

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

        さてさて、最終形態が近づいてきました。
        今回で、機能としては最終版にもっていきたいと思います。

        残る課題は、そうあれです、重さ、長さ、速度、等の系統ごとにドロップダウンメニューの中身が切り替わるようにしてやる、と宣言したやつです。

        いつものように、レイアウトから作っていきましょう。
        今回はこちらになります。


        1段目に、カテゴリーを選択するスピナーが追加になりました。
        あとは前回と同じで、入力、出力ともにスピナーで単位を選んで変換ボタンをタップする方式です。
        カテゴリーを選択すると、単位用スピナーの内容が切り替えられる仕組みを考えています。

        次に、リソースのstrings.xmlがこちらです。
        <resources>
            <string name="app_name">UnitConverter4</string>
            <string name="categoryText">カテゴリー:</string>
            <string name="initialValue">0.0</string>
            <string name="convert">変換</string>
            <string-array name="category">
                <item>長さ</item>
                <item>面積</item>
                <item>体積</item>
                <item>重さ</item>
            </string-array>
            <string-array name="unitListLength">
                <item>m</item>
                <item>km</item>
                <item>mile</item>
            </string-array>
            <string-array name="unitListArea">
                <item>m2</item>
                <item>a</item>
                <item>ha</item>
            </string-array>
            <string-array name="unitListVolume">
                <item>m3</item>
                <item>cc</item>
                <item>L</item>
            </string-array>
            <string-array name="unitListWeight">
                <item>kg</item>
                <item>lb</item>
                <item>貫</item>
            </string-array>
        </resources>
        

        画面表示用の文字列に続き、string-arrayでまずカテゴリースピナー用のリソースを用意しています。とりあえず、長さ、面積、体積、重さ、の4種類を登録しましたので、次にそれぞれに対する単位スピナー用のリソースを登録しています。

        そうしたら、これらを動かすjavaコードを見ていきましょう。
        ちょっと長くなりますが、全文表示しちゃいましょう。
        package com.example.tetsuya.unitconverter4;
        import android.support.v7.app.AppCompatActivity;
        import android.os.Bundle;
        // 中で使用するEditText, TextView, Viewをimport
        import android.widget.ArrayAdapter;
        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 UnitConverter4 extends AppCompatActivity {
            // 使用する変数等を定義
            EditText editText;
            TextView textView2;
            double convRatioInput = 1.0;
            double convRatioOutput = 1.0;
            double inputValue = 0.0;
            double outputValue = 0.0;
            int categoryNumber = 0;
            String input;
            String[] unitList;
            Spinner categorySpinner;
            Spinner unitSpinnerInput;
            Spinner unitSpinnerOutput;
            ArrayAdapter adapter;
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_unit_converter4);
                // 入力エリアと出力表示エリアのインスタンスを取得
                editText = (EditText) findViewById(R.id.editText);    // 入力エリア
                textView2 = (TextView) findViewById(R.id.textView2);    // 出力エリア
                categorySpinner = (Spinner) findViewById(R.id.spinner);     // カテゴリースピナー
                unitSpinnerInput = (Spinner) findViewById(R.id.spinner2);     // 入力単位スピナー
                unitSpinnerOutput = (Spinner) findViewById(R.id.spinner3);     // 出力単位スピナー
                // 変換ボタンのオンクリックリスナーを設定
                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;
                        // 変換した数値を文字列として出力エリアにセット
                        textView2.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();
                        if (categoryNumber==0) {    // 長さ
                            switch(idx){
                                case 0: // m
                                    convRatioInput = 1.0;
                                    break;
                                case 1: // km
                                    convRatioInput = 1000.0;
                                    break;
                                case 2: // mile
                                    convRatioInput = 1609.334;
                                    break;
                            }
                        }else if(categoryNumber==1){    // 面積
                            switch(idx){
                                case 0: // m2
                                    convRatioInput = 1.0;
                                    break;
                                case 1: // a
                                    convRatioInput = 100.0;
                                    break;
                                case 2: // ha
                                    convRatioInput  = 10000.0;
                                    break;
                            }
                        }else if(categoryNumber==2){    // 体積
                            switch(idx){
                                case 0: // m3
                                    convRatioInput = 1.0;
                                    break;
                                case 1: // cc
                                    convRatioInput = 0.000001;
                                    break;
                                case 2: // L
                                    convRatioInput = 0.001;
                                    break;
                            }
                        }else if(categoryNumber==3){    // 重さ
                            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();
                        if (categoryNumber==0) {    // 長さ
                            switch(idx){
                                case 0: // m
                                    convRatioOutput = 1.0;
                                    break;
                                case 1: // km
                                    convRatioOutput = 1000.0;
                                    break;
                                case 2: // mile
                                    convRatioOutput = 1609.334;
                                    break;
                            }
                        }else if(categoryNumber==1){    // 面積
                            switch(idx){
                                case 0: // m2
                                    convRatioOutput = 1.0;
                                    break;
                                case 1: // a
                                    convRatioOutput = 100.0;
                                    break;
                                case 2: // ha
                                    convRatioOutput  = 10000.0;
                                    break;
                            }
                        }else if(categoryNumber==2){    // 体積
                            switch(idx){
                                case 0: // m3
                                    convRatioOutput = 1.0;
                                    break;
                                case 1: // cc
                                    convRatioOutput = 0.000001;
                                    break;
                                case 2: // L
                                    convRatioOutput = 0.001;
                                    break;
                            }
                        }else if(categoryNumber==3){    // 重さ
                            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) {
                    }
                });
                // カテゴリーspinnerのアイテムセレクトリスナーを設定
                // リスナーを登録
                categorySpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
                    // アイテムが選択された時
                    @Override
                    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                        categoryNumber = categorySpinner.getSelectedItemPosition();
                        switch (categoryNumber) {
                            case 0: // 長さ
                                unitList = getResources().getStringArray(R.array.unitListLength);
                                break;
                            case 1: // 面積
                                unitList = getResources().getStringArray(R.array.unitListArea);
                                break;
                            case 2: // 体積
                                unitList = getResources().getStringArray(R.array.unitListVolume);
                                break;
                            case 3: // 重さ
                                unitList = getResources().getStringArray(R.array.unitListWeight);
                                break;
                        }
                        adapter = new ArrayAdapter(getApplicationContext(),android.R.layout.simple_spinner_item, unitList);
                        unitSpinnerInput.setAdapter(adapter);
                        unitSpinnerOutput.setAdapter(adapter);
                        convRatioInput = 1.0;
                        convRatioOutput = 1.0;
                    }
                    // アイテムが選択されなかったとき
                    @Override
                    public void onNothingSelected(AdapterView<?> parent) {
                    }
                });
            }
        }
        

        ではまた変わったところを説明していきます。

        まずはインポート部、5行目、ArrayAdapterのインポートが追加になっています。これはあとで単位スピナーのアイテムを入れ替えるときに使います。

        続いて変数の宣言部、20行目、カテゴリースピナーのインデックス用の変数が追加してあります。
        22行目に追加になっているのは、単位スピナー用の配列を一旦受け取るための配列です。
        23行目にはカテゴリースピナーのインスタンス用変数が、26行目には先ほどのArrayAdapterの変数が宣言してあります。

        34行目では、カテゴリースピナーのインスタンスを取得しています。

        57〜114行は、入力用単位スピナーのアイテムに対応して変換係数をセットするところです。カテゴリースピナーのインデックスを保存しているcategoryNumberの値に応じて、セットする係数セットを切り替えるようにしています。
        117〜174行目は今度は出力用単位スピナーの変換係数設定部です。変換係数の変数名が違うだけで後は入力単位スピナー用のブロックと全く同じです。

        そして今回新たに作ったのが、177〜206行目の、カテゴリースピナーを切り替えると同時に単位スピナーのセットも切り替える処理のリスナーです。
        まず181行目で、カテゴリースピナーのインデックスを取得します。
        そして、182〜195行目で、このインデックスに応じて、リソースからString-Arrayに設定した単位スピナー用の表示文字列セットを取り出します。
        続いて196行目でこの配列をアダプターにセット、197〜198行目で単位スピナーにこのアダプターをセットします。
        併せて199〜200行目で入出力の変換係数をリセットしています。ここで常に1でリセットすればいいように、変換の基準となる単位を単位スピナーの先頭にもってきてあるのです。

        以上で、目的の機能の実装が完了しました。
        あとは、世の中にある単位を気のすむだけ追加してやれば完成です。
        ひとまず完成です。



        でもちょっと気になるところがあるんですよね・・・



        機能はいいんですが、表示が。
        今回m2とかm3とかの単位が出てきたんですが、これ数字をちゃんと上付きにできないかなぁ・・・と思って。



        うーん、ちょっと調べてみますね。
        ではまた近いうちに。

         



        calendar

        S M T W T F S
             12
        3456789
        10111213141516
        17181920212223
        24252627282930
        31      
        << March 2024 >>

        アクセスカウンタ

        合計:
        今日:
        昨日:

        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

        楽天ブックス

        楽天