如何过滤 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;
}
}
我正在尝试在我的 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;
}
}