2013
06/17
前回までの画像を見ると、「XXXは必ず入力してください」の
XXXがすべて英語で表示されている。
そう、フィールド名がそのまま表示されているのだ。
それじゃぁちょっとユーザーとしては使いにくい。
というわけで、項目名を任意の文字列に差し替える方法を紹介する。
▼TestForm.java
▼strings.xml
たったこれだけ。
nameResIdにはstrings.xmlで定義したIDを指定する。
EditTextの上に置いたTextViewと同じ文字列を指定してやれば、とってもわかりやすい。
同じようにすべての項目にnameResIdを設定してあげた結果がこちら。

XXXがすべて英語で表示されている。
そう、フィールド名がそのまま表示されているのだ。
それじゃぁちょっとユーザーとしては使いにくい。
というわけで、項目名を任意の文字列に差し替える方法を紹介する。
▼TestForm.java
@Widget(id = R.id.testform_edittext_name, nameResId = R.string.name)
@Required
public String name;
▼strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="name">名前</string>
</resources>
たったこれだけ。
nameResIdにはstrings.xmlで定義したIDを指定する。
EditTextの上に置いたTextViewと同じ文字列を指定してやれば、とってもわかりやすい。
同じようにすべての項目にnameResIdを設定してあげた結果がこちら。

2013
06/17
前回は必須チェックだけだったので、今回はそれ以外についても書いてみる。
前回の画像でチラリと出現しているが、
今回はチェックボックスと日付のチェックについて。
まずはチェックボックス。

上記の画像を見ると、メッセージに「hobbiesは少なくとも2個選択してください」と表示されている。
そう!必須選択個数を簡単に設定できるのだ!便利!!
さっそく、定義方法を紹介。
下記コードの@Requiredに注目。
※@Widgetの定義は前回のラジオボタンと同じ方法。(RadioGroupの代わりにLinearLayoutを使おう!)
▼TestForm.java
たったこれだけ。実に簡単。
次に、日付のチェックについて説明する。
日付のチェックは2種類用意されている。
ただ、日付形式で入力されているかどうかをチェックする「@DatePattern」と
さらに過去の日付であるかどうかもチェックする「@PastDate」。
今回は生年月日なので、過去の日付かどうかチェックする。
上記の通り、@PastDateをフィールドに付与するだけ。
valueは任意なので指定しなくてもいい。
デフォルトは yyyy/MM/dd となる。(※端末の言語設定が日本語の場合)
allowTodayは今日を許可するかどうか。上記は今日を許可する(エラーとしない)設定。
こちらも任意で、デフォルトはfalseになっている。
ではでは表示を見てみよう。
▼過去の日付だが、形式に誤りがある

▼形式は正しいが、未来の日付である

▼OK

欲を言うと、1番目の形式誤りは
「birthdayはyyyy-MM-dd形式で入力してください」と表示してほしいが(わがまま)
こんな便利なライブラリを本当にありがとうございます。
前回の画像でチラリと出現しているが、
今回はチェックボックスと日付のチェックについて。
まずはチェックボックス。

上記の画像を見ると、メッセージに「hobbiesは少なくとも2個選択してください」と表示されている。
そう!必須選択個数を簡単に設定できるのだ!便利!!
さっそく、定義方法を紹介。
下記コードの@Requiredに注目。
※@Widgetの定義は前回のラジオボタンと同じ方法。(RadioGroupの代わりにLinearLayoutを使おう!)
▼TestForm.java
@Widget(id = R.id.testform_checkbox_hobby, values = {
@WidgetValue(id = R.id.testform_checkbox_hobby_cook, value = "cook"),
@WidgetValue(id = R.id.testform_checkbox_hobby_drive, value = "drive"),
@WidgetValue(id = R.id.testform_checkbox_hobby_pet, value = "drive") })
@Required(atLeast = 2)
public List<String> hobbies;
たったこれだけ。実に簡単。
次に、日付のチェックについて説明する。
日付のチェックは2種類用意されている。
ただ、日付形式で入力されているかどうかをチェックする「@DatePattern」と
さらに過去の日付であるかどうかもチェックする「@PastDate」。
今回は生年月日なので、過去の日付かどうかチェックする。
@Widget(id = R.id.testform_edittext_birthday)
@Required
@PastDate(value = "yyyy-MM-dd", allowToday = true)
public String birthday;
上記の通り、@PastDateをフィールドに付与するだけ。
valueは任意なので指定しなくてもいい。
デフォルトは yyyy/MM/dd となる。(※端末の言語設定が日本語の場合)
allowTodayは今日を許可するかどうか。上記は今日を許可する(エラーとしない)設定。
こちらも任意で、デフォルトはfalseになっている。
ではでは表示を見てみよう。
▼過去の日付だが、形式に誤りがある

▼形式は正しいが、未来の日付である

▼OK

欲を言うと、1番目の形式誤りは
「birthdayはyyyy-MM-dd形式で入力してください」と表示してほしいが(わがまま)
こんな便利なライブラリを本当にありがとうございます。
2013
06/17
前回はAndroidFormEnhancerというライブラリを取り込んだので
今回は実際にそれを使ってみる。
こちらに作者ご本人からの説明があるので
それに素直に従って実装してみる。
https://github.com/ksoichiro/AndroidFormEnhancer/blob/master/README.ja.md
まず、こんなフォームを用意した。

次に、このフォームの入力項目を定義したクラスを1つ作成する。
そして今度はそれと入力項目のViewをidで紐づけていく。
名前(name)と性別(gender)を例とする。
▼TestForm.java
▼activity_android_form_enhancer_test.xml
そしていよいよ、チェック内容を定義する。
まずは名前。入力必須とする。
▼TestForm.java
次に、性別。こちらも入力必須。
▼TestForm.java
最後にチェックを行う。
「チェック」ボタンを押下したときにチェックを行うこととする。
というわけで、下記のocClickメソッドの処理に注目してほしい。
▼AndroidFormEnhancerTestActivity.java
FormHelperの第一引数に、さきほど定義したフォームのクラスを設定するのがポイント。
なんとこれだけでロジックごりごりせずに入力チェックが行える。

今回は実際にそれを使ってみる。
こちらに作者ご本人からの説明があるので
それに素直に従って実装してみる。
https://github.com/ksoichiro/AndroidFormEnhancer/blob/master/README.ja.md
まず、こんなフォームを用意した。

次に、このフォームの入力項目を定義したクラスを1つ作成する。
public class TestForm {
public String name;
public String gender;
public String birthday;
public List<String> hobbies;
}
そして今度はそれと入力項目のViewをidで紐づけていく。
名前(name)と性別(gender)を例とする。
▼TestForm.java
@Widget(id = R.id.testform_edittext_name)
public String name;
@Widget(id = R.id.testform_radiogroup_gender, values = {
@WidgetValue(id = R.id.testform_radiobutton_gender_male, value = "M"),
@WidgetValue(id = R.id.testform_radiobutton_gender_female, value = "F") })
public String gender;
▼activity_android_form_enhancer_test.xml
<EditText
android:id="@+id/testform_edittext_name" />
<RadioGroup
android:id="@+id/testform_radiogroup_gender" />
<RadioButton
android:id="@+id/testform_radiobutton_gender_male" />
<RadioButton
android:id="@+id/testform_radiobutton_gender_female" />
</RadioGroup>
そしていよいよ、チェック内容を定義する。
まずは名前。入力必須とする。
▼TestForm.java
@Widget(id = R.id.testform_edittext_name)
@Required
public String name;
次に、性別。こちらも入力必須。
▼TestForm.java
@Widget(id = R.id.testform_radiogroup_gender, values = {
@WidgetValue(id = R.id.testform_radiobutton_gender_male, value = "M"),
@WidgetValue(id = R.id.testform_radiobutton_gender_female, value = "F") })
@Required
public String gender;
最後にチェックを行う。
「チェック」ボタンを押下したときにチェックを行うこととする。
というわけで、下記のocClickメソッドの処理に注目してほしい。
▼AndroidFormEnhancerTestActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
~略~
Button checkButton = (Button) findViewById(R.id.testform_button_submit);
checkButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ValidationResult result = new FormHelper(TestForm.class, AndroidFormEnhancerTestActivity.this)
.validate();
if (result.hasError()) {
// エラーメッセージを表示します
Toast.makeText(AndroidFormEnhancerTestActivity.this, result.getAllSerializedErrors(),
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(AndroidFormEnhancerTestActivity.this, "エラーはありません", Toast.LENGTH_SHORT).show();
}
}
});
}
FormHelperの第一引数に、さきほど定義したフォームのクラスを設定するのがポイント。
なんとこれだけでロジックごりごりせずに入力チェックが行える。

2013
06/14
R.javaが生成されない理由として、ネットで調べると
大概こう書いてある。
「レイアウトxmlにエラーがある」
「AndroidManifest.xmlにエラーがある」
「クリーン・ビルドせよ」
「ビルドパスが間違っている」
等々。
しかし、どれを確認しても解決しない!
AndroidManifest.xmlを見てみた。
<uses-sdk
android:targetSdkVersion="17"/>
そういえば、さっきSDKをアップデートしたんだった。
↓修正↓
<uses-sdk
android:targetSdkVersion="22"/>
直った。
大概こう書いてある。
「レイアウトxmlにエラーがある」
「AndroidManifest.xmlにエラーがある」
「クリーン・ビルドせよ」
「ビルドパスが間違っている」
等々。
しかし、どれを確認しても解決しない!
AndroidManifest.xmlを見てみた。
<uses-sdk
android:targetSdkVersion="17"/>
そういえば、さっきSDKをアップデートしたんだった。
↓修正↓
<uses-sdk
android:targetSdkVersion="22"/>
直った。
2013
06/14
前編で分かった通り、inputTypeの設定だけでは望まないINPUTが来る可能性がある。
というわけで、入力チェックを行おうと思う。
ありがたいことに、AndroidFormEnhancerというライブラリが存在する。
しかも日本語メッセージ対応!!
さっそくDLして使ってみる。
取り込み方は以下を参考に行った。
http://tmpla.info/archives/1211
このライブラリはActivityを含まないので、AndroidManifst.xmlの修正は不要。
さて、インポートしてライブラリとして参照してみたが、
取り込んだプロジェクトにエラーがでている!
Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.
よく分からない(というか読む気がない)が、
コンパイラーの設定が間違っているようだ。
コンパイラー準拠レベルを1.7から1.6に変更する。
直った。
今度はライブラリを参照している自前のプロジェクトにエラーが出ている。
Jar mismatch! Fix your dependencies
ライブラリのプロジェクトに入っているandroid-support-v4.jarと
自前のプロジェクトに入っているandroid-support-v4.jarを
二重に参照しているのが悪いらしい。
情報元↓
http://106n.net/toro/blog/?p=658
自前のプロジェクトのほうを削除したらエラーは消えた。
上記の記事では、ライブラリ側のandroid-support-v4.jarを差し替えているが
どちらが最新か分からないし、自前のandroid-support-v4.jarをライブラリ側に上書きすると
AndroidFormEnhancer-demoがエラーになったので、
今回は自前のプロジェクトの方を削除することにした。
※削除中にエラーが出る場合はeclipseを再起動すると削除できるようになる。
というわけで、入力チェックを行おうと思う。
ありがたいことに、AndroidFormEnhancerというライブラリが存在する。
しかも日本語メッセージ対応!!
さっそくDLして使ってみる。
取り込み方は以下を参考に行った。
http://tmpla.info/archives/1211
このライブラリはActivityを含まないので、AndroidManifst.xmlの修正は不要。
さて、インポートしてライブラリとして参照してみたが、
取り込んだプロジェクトにエラーがでている!
Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.
よく分からない(というか読む気がない)が、
コンパイラーの設定が間違っているようだ。
コンパイラー準拠レベルを1.7から1.6に変更する。
直った。
今度はライブラリを参照している自前のプロジェクトにエラーが出ている。
Jar mismatch! Fix your dependencies
ライブラリのプロジェクトに入っているandroid-support-v4.jarと
自前のプロジェクトに入っているandroid-support-v4.jarを
二重に参照しているのが悪いらしい。
情報元↓
http://106n.net/toro/blog/?p=658
自前のプロジェクトのほうを削除したらエラーは消えた。
上記の記事では、ライブラリ側のandroid-support-v4.jarを差し替えているが
どちらが最新か分からないし、自前のandroid-support-v4.jarをライブラリ側に上書きすると
AndroidFormEnhancer-demoがエラーになったので、
今回は自前のプロジェクトの方を削除することにした。
※削除中にエラーが出る場合はeclipseを再起動すると削除できるようになる。
プロフィール
Author:nov
パセリはおやつです。
最新コメント
最新トラックバック
タグクラウドとサーチ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム
QRコード
