Javaで少し計算プログラムを作ってたんですが、それをAndroidに移植したくなりました。Javaプログラムの時はGUIも作ってみたんですが、計算諸元の設定は基本ファイルか、プログラムに直にコーディングで済ませてしまっていましたが、さすがにAndroidプログラムではそれはまずかろうと、GUI作って、その入力部分の作成からです。
Android開発環境ができていれば、GUI部分の開発(?)は簡単です。
(ラベルのところはあえて消してあります。ご容赦を_(._.)_)
ところで、このプログラムはAndroid4.0.3以降(API15)でプロジェクトの作成をしたんですが、昔はあった記憶のあるラベルwidgetがありません。しかたないので、Text widgetを貼り付け、初期の文字列を設定します。(activity_main.xmlに直に文字列書くと、eclipseがwarning出してくるので、面倒くさいんですが、文字列定義はstring.xmlを使うようにしました。多国語対応が簡単にできるようになんでしょうが、どうせ日本語しか作るきはないので無視してもいいんですが。)
1.ラベル相当が作れない
Textでラベルを作ろうと思っても、デフォルトは編集可能です。これをなんとか編集不可にしないといけません。調べてみると、当該widgetのandroid:editableという属性を"false"にすればいいらしいんですが、非推奨ということでeclipseではwarningがでてきます。それじゃどうしたらいいかというと、android:inputTypeで設定しろとのことですが、入力不可の"none"にしても(画面上では)編集はできてしまいます。どうしてもいい方法が見つからず、あきらめてandroid:editable属性をactivity_main.xmlで定義しました。(ただこの方法だと非推奨なので、warningはでます。)
2.(数値の)入力
これが一番苦しみました。widget自体はEditTextで作成すればいいんですが、ここで(符号付)数値のみの入力に制限しようとしますが、なかなかうまくいきません。関連したのは以下です。
number:数値入力する場合に指定します
numberSigned:符号付数値を入力する場合に指定します
numberDecimal:少数入力する場合に指定します
色々試してみましたが、numberSigned|numberDecimalがよさげです。(numberだと小数点が入力できません)
続いてこれの読み取りですが、結局以下のような感じになります。
double ldlat;
EditText latText=(EditText)findViewById(R.id.editLat);
EditText latText=(EditText)findViewById(R.id.editLat);
String input=latText.getText().toString();
ldlat = Double.parseDouble(input);
文字列で入力された数値をdouble型に入れたいんですが、結構面倒でした。int型等それぞれparse関数があります。方法を見つけるのに時間がかかったのが、EditTextからgetしてくるとき、どうやってString型にするかでした。それさえわかれば、あとは簡単でした。
本来の作業はこれからですが、入力さえ解決してしまえば後は単純作業です。(問題になるとしたら、Android端末側のCPUパワーやメモリ等のリソースからくる制限でしょうね)
0 件のコメント:
コメントを投稿