SQLite
Pluginを探していたら、SQL AndroidというPluginを見つけた。なんかすごい便利そう!と思ったので使ってみたくなった。ので、RDBを使ったアプリを作ってみたい。RDBに関しては、ほとんど知識がない。仕事でちょろっとAccessを使ったことがあるけど、すっごい簡単なSQL文書くぐらいで、リレーション張ったこともないぐらい。できるかな。できるだろ。ついでにちょこちょこ作ってくやつも作ろう。生活電卓って名前にしよう。
とりあえずBMI計算機を作ろう
そんでその記録を保存するためにSQLite使えばいいんだ。そうしよう。
画面作る
色んな計算のリスト→個別の計算→その計算の履歴みたいな遷移にしたい。リストを作るにはListViewを使うみたい。見てみたらLegacyに入ってる。今はRecyclerViewに置き換わってるみたい。えー、どっち使えばいいん。色々見るとRecyclerViewはクリックイベントを自分で実装するらしい。それは自分には無理そうなので、ListViewにすることにした。
string.xml
<resources> <string name="app_name">My Application</string> <string-array name="calc_menu"> <item>BMI計算</item> <item>日数計算</item> <item>現年齢</item> <item>時給給与計算</item> <item>子供の肥満</item> <item>消費税</item> <item>時間計算</item> <item>適正・美容・モデル体重</item> <item>底辺と高さから角度と斜辺を計算</item> <item>子供の身長予測</item> </string-array> </resources>
activity_main.xml
<ListView android:layout_width="match_parent" android:layout_height="match_parent" android:entries="@array/calc_menu"/>
で、一番最初の画面ができた。とりあえずBMIということでそっちのActivityの画面を作る。
ま、てきとーに。
リストをクリックしたらBMIに飛ぶようにする
ListItemClickListener
private class ListItemClickListener implements AdapterView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) { Intent intent; switch (position) { case (0): intent = new Intent(LifeCalcActivity.this, BMIActivity.class); startActivity(intent); break; case (1): break; } } }
うーんと、AdapterViewがListView、ViewがListViewのView(この場合TextViewが取れてる。string_arrayからだからかな?)、positionが行番号、idが…なんのidだろこれ。ま、いいや。とりあえずpositionでswitchしてみた。
onCreate内
ListView listView = findViewById(R.id.calc_menu); listView.setOnItemClickListener(new ListItemClickListener());
んで、リスナの設定。
BMI計算
画面の処理色々
android:focusable="true" android:focusableInTouchMode="true"
最初画面作った際、身長欄にフォーカスが当たってたので、TextViewにフォーカスを設定してEditTextのフォーカスを外す。
android:hint="@string/body_height"
入力説明用にTextを入力しといたら、フォーカスしても残ってるのでなんじゃこりゃ、と思ったらandroid:hintに設定するんだったみたい。
android:inputType="numberDecimal"
キーボードが文字入力で出てくるので、数字入力にする。これで入力制限もできるみたい。
入力終了時にフォーカスが当たりっぱなのが気に食わないけど、改善方法が分からんのでほっとく。
計算する
電卓作ったときに見なかったことにしたBigDesimalを使ってみる。
EditText etHeight; EditText etWeight; TextView tvResult;
public void onClickCalc(View v) { String result; etHeight = findViewById(R.id.editTextHeight); etWeight = findViewById(R.id.editTextWeight); tvResult = findViewById(R.id.result_textView); BigDecimal valueHeight = new BigDecimal(etHeight.getText().toString()); BigDecimal valueWeight = new BigDecimal(etWeight.getText().toString()); valueHeight = valueHeight.scaleByPowerOfTen(-2).pow(2); result = valueWeight.divide(valueHeight, 2, RoundingMode.HALF_UP).toPlainString(); tvResult.setText("あなたのBMIは…" + "\n" + result); }
こんな。若干めんどくせぇな。
なかなかに普通だ。そしたら今度は計算結果をDBに保存してくようにすればいいね。ようやくだな、記事分けよっと。
参考
[affi id=2]
https://keisan.casio.jp/keisan/ranking100.php
https://knowledge.moshimore.jp/entry/android_application_edittext_focus
https://akira-watson.com/android/edittext.html
https://akira-watson.com/android/edittext_input_display.html
https://monoworks.co.jp/post/android_develop_memo_2015111601/
https://developer.android.com/reference/android/widget/TextView?hl=ja#attr_android:inputType