如何将DecimalFilter设置为允许输入负小数的EditText?(Xamarin.Android)
我有以下如何将DecimalFilter设置为允许输入负小数的EditText?(Xamarin.Android),filter,xamarin.android,set,negative-number,Filter,Xamarin.android,Set,Negative Number,我有以下DecimalFilter类: public class DecimalFilter : Java.Lang.Object, IInputFilter { String regex = "[-+]?[0-9]+((\\.[0-9]{0," + (2 - 1) + "})?)||(\\.)?"; public DecimalFilter(int digitsAfterZero) { regex = "[-+]?^[0-9]+(.[0-9]{0," +
DecimalFilter
类:
public class DecimalFilter : Java.Lang.Object, IInputFilter
{
String regex = "[-+]?[0-9]+((\\.[0-9]{0," + (2 - 1) + "})?)||(\\.)?";
public DecimalFilter(int digitsAfterZero)
{
regex = "[-+]?^[0-9]+(.[0-9]{0," + (digitsAfterZero - 1) + "})?$";
}
public Java.Lang.ICharSequence FilterFormatted(Java.Lang.ICharSequence source, int start, int end, ISpanned dest, int dstart, int dend)
{
if (System.Text.RegularExpressions.Regex.IsMatch(dest.ToString(), regex) || dest.ToString().Equals(""))
{
return new Java.Lang.String(source.ToString());
}
return new Java.Lang.String(string.Empty);
}
}
我将其设置为我的EditText
,如下所示:
discountEditText.SetFilters(new IInputFilter[] { new DecimalFilter(2) });
我还将我的EditText
设置为允许在我的文件中使用负小数:
<EditText
.....
android:inputType="numberDecimal|numberSigned"
android:id="@+id/discountEditText" />
我希望编辑文本不能是负面的
但是当我开始输入时,-EditText不允许我输入任何其他内容
原因是当您在-
之后输入另一个数字时,FilterFormatted
中的dest
值仅为“-”。在正则表达式中,您使用的是[0-9]+
。这意味着它至少需要一个号码。因此它在IsMatch
中返回false
当您输入-
时,dest
的值为空。因此,if条件为true
对于此问题,您可以在匹配字符串时尝试添加源代码。例如:
public class DecimalFilter : Java.Lang.Object, IInputFilter
{
public DecimalFilter(int digitsAfterZero)
{
String regex = "^[-+]?[0-9]+(.[0-9]{0," + (digitsAfterZero - 1) + "})?$";
}
public Java.Lang.ICharSequence FilterFormatted(Java.Lang.ICharSequence source, int start, int end, ISpanned dest, int dstart, int dend)
{
if (System.Text.RegularExpressions.Regex.IsMatch(dest.ToString()+source, regex) || (dest.ToString()).Equals(""))
{
return new Java.Lang.String(source.ToString());
}
return new Java.Lang.String(string.Empty);
}
}
public class DecimalFilter2 : Java.Lang.Object, IInputFilter
{
public DecimalFilter2(int digitsAfterZero)
{
String regex = "^[^-][0-9]*(.[0-9]{0," + (digitsAfterZero - 1) + "})?$";
}
public Java.Lang.ICharSequence FilterFormatted(Java.Lang.ICharSequence source, int start, int end, ISpanned dest, int dstart, int dend)
{
if (System.Text.RegularExpressions.Regex.IsMatch(dest.ToString()+ source, regex) || (dest.ToString() + source).Equals(""))
{
return new Java.Lang.String(source.ToString());
}
return new Java.Lang.String(string.Empty);
}
}
我希望编辑文本不能是负面的
我认为您需要使用新的过滤器。
例如:
public class DecimalFilter : Java.Lang.Object, IInputFilter
{
public DecimalFilter(int digitsAfterZero)
{
String regex = "^[-+]?[0-9]+(.[0-9]{0," + (digitsAfterZero - 1) + "})?$";
}
public Java.Lang.ICharSequence FilterFormatted(Java.Lang.ICharSequence source, int start, int end, ISpanned dest, int dstart, int dend)
{
if (System.Text.RegularExpressions.Regex.IsMatch(dest.ToString()+source, regex) || (dest.ToString()).Equals(""))
{
return new Java.Lang.String(source.ToString());
}
return new Java.Lang.String(string.Empty);
}
}
public class DecimalFilter2 : Java.Lang.Object, IInputFilter
{
public DecimalFilter2(int digitsAfterZero)
{
String regex = "^[^-][0-9]*(.[0-9]{0," + (digitsAfterZero - 1) + "})?$";
}
public Java.Lang.ICharSequence FilterFormatted(Java.Lang.ICharSequence source, int start, int end, ISpanned dest, int dstart, int dend)
{
if (System.Text.RegularExpressions.Regex.IsMatch(dest.ToString()+ source, regex) || (dest.ToString() + source).Equals(""))
{
return new Java.Lang.String(source.ToString());
}
return new Java.Lang.String(string.Empty);
}
}
对于第一个问题,我更改了正则表达式,但现在我甚至无法输入-
,然后我将正则表达式设置为以前的样子,并更改了过滤执行的
方法。它保持不变,我无法输入-
。然后我更改了正则表达式和过滤执行的
方法,并且我也无法输入
-@ProfileForStack4,抱歉这个错误。第一个解决方案,在我这边行得通,我不知道为什么在你这边不行。对于第二个解决方案,请删除if
条件中的第二个源。我已经修改并测试了我的答案,请检查一下。现在一切都好了。我只需要在我的EditText的.axml
文件中放入android:inputType=“numberDecimal | numberSigned”
。谢谢