如何过滤 EditText 中的字符

How to filter characters in an EditText

我正在尝试在我的 Xamarin Android 应用程序中为 EditText 创建一个 IInputFilter。我在下面创建了 class 来执行此操作。在我输入无效字符之前,它工作正常。它按预期过滤了无效字符,但之后源包含自无效字符以来输入的所有有效字符。

键“a”-来源=“a”

键“b”-来源=“b”

Key "," - source = ","(这是一个无效字符,所以我们 return 空字符串)

键“c”-来源=“c”

键“d”- source =“cd”(为什么不只是“d”?)

键“e”- source =“cde”(依此类推)

public class AlphaFilter : Java.Lang.Object, IInputFilter
{
    public Java.Lang.ICharSequence FilterFormatted(Java.Lang.ICharSequence source, int start, int end, ISpanned dest, int dstart, int dend)
    {
        Java.Lang.String strResult;
        bool blnValidated = source.ToString() == string.Empty || source.ToString().All(Char.IsLetterOrDigit);

        if (blnValidated)
        {
            strResult = new Java.Lang.String(source.ToString());
        }
        else
        {
            strResult = new Java.Lang.String(string.Empty);
        }
        return strResult;
    }
}

找到问题了。当字符有效时,您只需 return null。这是工作代码:

    public class AlphanumericFilter : Java.Lang.Object, IInputFilter
{
    public Java.Lang.ICharSequence FilterFormatted(Java.Lang.ICharSequence source, int start, int end, ISpanned dest, int dstart, int dend)
    {
        Java.Lang.String strResult;
        bool blnValidated = source.ToString() == string.Empty || source.ToString().All(Char.IsLetterOrDigit);

        if (blnValidated)
        {
            strResult = null;
        }
        else
        {
            strResult = new Java.Lang.String(string.Empty);
        }
        return strResult;
    }
}