Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 动态将InputType从文本切换为数字_Android_Postal Code - Fatal编程技术网

Android 动态将InputType从文本切换为数字

Android 动态将InputType从文本切换为数字,android,postal-code,Android,Postal Code,加拿大邮政编码的格式如下: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_

加拿大邮政编码的格式如下:
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)
。。。(继续,但从未提及我的课程。)


我的猜测是,输入类型不喜欢视图中已经存在不受支持的字符。

输入类型实际上并不限制允许的键,它是向键盘提示将输入什么,因此键盘可以决定更改其UI。没有任何内容阻止您向数字字段添加文本。在您设置的筛选器中调用replace可能会出现问题(筛选器与输入类型不同)

事实上,大多数键盘甚至不会触发这种情况-XXXKeyListener类通常只由硬件键盘调用,而硬件键盘会导致keydown和keydup事件。软件键盘通常不会这样做。您最初是否为该字段指定了空输入类型?这是唯一能让普通软键盘假装成硬件键盘的东西


哦,还有一件事——在字段处于活动状态时设置输入模式通常不起作用。如果不重置输入连接,大多数键盘甚至不会检测到它(键盘端没有更改输入类型API)。如果您确实重置了输入连接,您可能会遇到各种各样的自动更正和计时的奇怪行为(我知道Swype有十几种不同的规则来消除重置输入连接所干扰的事件的抖动)。不建议更改输入类型。

我想是的,但加拿大邮政编码确实很适合输入。有一个初始文本输入类型。还有一个长度inputfilter(6),但我重写了它,它似乎没有被命中。谢谢你的回答