【发布时间】:2015-04-03 18:11:39
【问题描述】:
加拿大邮政编码格式如下:A1A1A1,并匹配以下正则表达式:
[ABCEGHJKLMNPRSTVXY][0-9][A-Z][0-9][A-Z][0-9]
我正在设置一个EditText 供用户输入他们的邮政编码。我想交替显示文本和数字键盘。
天真地,我在 TextWatcher 或 InputFilter 中使用此代码
if (Character.isDigit(s.charAt(s.length() - 1))) {
zipView.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS
| InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
} else {
zipView.setInputType(InputType.TYPE_CLASS_PHONE);
}
但是,当用户输入第一个数字时,这会导致异常。
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:464)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:454)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:33)
at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:121)
at android.widget.TextView.doKeyDown(TextView.java:5787)
at android.widget.TextView.onKeyDown(TextView.java:5600)
at android.view.KeyEvent.dispatch(KeyEvent.java:2609)
...(继续说我的课程。)
我的猜测是输入类型不喜欢视图中已经存在不受支持的字符。
【问题讨论】:
标签: android postal-code