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

问题描述 投票:2回答:1

所以对于某些项目我正在使用Xamarin.Forms。

由于使用Xamarin.Forms,一个区域的速度令人难以忍受。我使用CustomRenderer来解决涉及列表的特定区域。

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

我将"1234"设置为EditText,而EditText.Text属性突然变为"49505152" - 该字符串被转换为其ascii等价物。

value assignment result

这是一个已知的问题?有谁知道如何修理它?

xamarin.forms xamarin.android
1个回答
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);
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.