这可能是这个android EditText控件将输入转换为ascii序列的原因

时间:2018-09-06 08:03:39

标签: xamarin.forms xamarin.android

因此对于某些项目,我正在使用Xamarin.Forms。

由于使用Xamarin的速度非常慢,因此我使用了CustomRenderer来解决一个涉及列表的特定区域。

回到项目并升级软件包后,我突然发现了最奇怪的错误。

我将"1234"设置为EditText,并且EditText.Text属性突然变成"49505152"-字符串被转换为它的ascii等效项。

value assignment result

这是一个已知问题吗?有人知道如何解决吗?

1 个答案:

答案 0 :(得分:0)

问题的原因是我的EditText应用了InputFilter,并且在更新程序包后突然执行了另一个FilterFormatted的代码路径。

    public ICharSequence FilterFormatted(ICharSequence source, int start, int end, ISpanned dest, int dstart, int dend)
    {
        var startSection = dest.SubSequenceFormatted(0, dstart);
        var insert = source.SubSequenceFormatted(start, end);
        var endSection = dest.SubSequenceFormatted(dstart, dest.Length());
        var merged = $"{startSection}{insert}{endSection}";
        if (ValidationRegex.IsMatch(merged) && InputRangeCheck(merged, CultureInfo.InvariantCulture))
        {
            StringBuilder sb = new StringBuilder(end - start);
            for (int i = start; i < end; i++)
            {
                char c = source.CharAt(i);
                sb.Append(c);
            }

            if (source is ISpanned) {
                SpannableString sp = new SpannableString(sb);
                TextUtils.CopySpansFrom((ISpanned)source, start, sb.Length(), null, sp, 0);
                return sp;
            } else {
                // AFTER UPDATE THIS PATH WAS ENTERED UNLIKE BEFORE
                return sb;
            }
        }
        else
        {
            return new SpannableString(string.Empty);
        }
    }