【发布时间】:2019-04-03 13:33:02
【问题描述】:
我有一个程序要从 Android 7.1.1 升级到现在的 8.1。大多数事情进展得非常顺利,但我在一件事情上遇到了障碍。
我有一个使用 EditText 的邮政编码条目。此条目最初以 ClassText 的 InputType 开始,当用户输入他们的字符时,我正在从 ClassText 到 ClassNumber 来回交换以获得结果格式,例如:“M1N2J8”
在 7.1.1 上可以正常工作,没有问题。但是,这种行为似乎在 8.1 中发生了变化。当我输入“M”然后输入“1”时,我没有问题,但是在我将其更改回 ClassText 输入“N”后,它会清除“1”并留下“MN”
如果有人能就我如何解决这个问题提供任何见解,我将不胜感激。在最坏的情况下,我将简单地启用一个字母数字键盘并自己处理限制字符,但我的客户非常喜欢让键盘在文本和数字输入之间交换,所以这就是我现在的目标。
谢谢!
if (txt.SelectionStart == 0 || txt.SelectionStart == 2 || txt.SelectionStart == 4)
{
txt.InputType = InputTypes.ClassText | InputTypes.TextFlagCapCharacters;
txt.SetFilters(new IInputFilter[] { new InputFilterLengthFilter(maxLength), new AlphaInputFilter() });
}
else if (txt.SelectionStart == 1 || txt.SelectionStart == 3 || txt.SelectionStart == 5)
{
txt.InputType = InputTypes.ClassNumber;
txt.SetFilters(new IInputFilter[] { new InputFilterLengthFilter(maxLength), new NumberInputFilter() });
}
【问题讨论】:
-
你的 AlphaInputFilter 和 NumberInputfilter 导致了这个问题,你能说明你是如何实现它们的吗??
-
更改 InputType 加上 LengthFilter 就足够了,最后你想要的值是字母数字,它不适合你的任何 InputFilters
-
天哪,你是对的。我真愚蠢....好吧,我将删除 Alpha 和 Numeric 过滤器,并用我自己的字符处理替换它们。谢谢:)
标签: c# xamarin android-8.1-oreo