2013年1月4日金曜日

Androidプログラム開発-数値の入力

久しぶりに、Androidのプログラム開発(あえてアプリとはいいません。個人的に楽しむのが主目的なんで)をしてみました。

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);
String input=latText.getText().toString();
ldlat = Double.parseDouble(input);

文字列で入力された数値をdouble型に入れたいんですが、結構面倒でした。int型等それぞれparse関数があります。方法を見つけるのに時間がかかったのが、EditTextからgetしてくるとき、どうやってString型にするかでした。それさえわかれば、あとは簡単でした。

本来の作業はこれからですが、入力さえ解決してしまえば後は単純作業です。(問題になるとしたら、Android端末側のCPUパワーやメモリ等のリソースからくる制限でしょうね)

0 件のコメント:

コメントを投稿