如何将 DecimalFilter 设置为允许输入负小数的 EditText? (Xamarin.Android)
How to set DecimalFilter to EditText which allows the input of negative decimals? (Xamarin.Android)
我有以下 DecimalFilter
class:
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
以允许在我的 .axml
文件中使用负小数:
<EditText
.....
android:inputType="numberDecimal|numberSigned"
android:id="@+id/discountEditText" />
当我输入 EditText
正数时,一切正常文件,但是当我开始输入 -
时,EditText
不允许我输入任何其他内容。它只保留 -
。如何使其能够接收小数分隔符后最多 2 个符号的负小数?我也为另一个 EditText
设置了相同的过滤器:
quantityEditText.SetFilters(new IInputFilter[] { new DecimalFilter(3) });
我希望 EditText 不能为负数。
but when I start typing in - EditText doesn't allow me to enter nothing else.
原因是当你在-
后面输入另一个数字时,你的FilterFormatted
中的dest
的值只有“-”。在正则表达式中,您使用的是 [0-9]+
。这意味着它至少需要一个数字。所以它 returns 在 IsMatch
中是错误的。
输入-
时,dest
的值为空。所以 if 条件为真。
对于这个问题,你可以尝试在匹配字符串的时候加上source
。例如:
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);
}
}
I want that EditText not to be able to be negative.
我认为你需要使用新的过滤器。
例如:
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);
}
}
我有以下 DecimalFilter
class:
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
以允许在我的 .axml
文件中使用负小数:
<EditText
.....
android:inputType="numberDecimal|numberSigned"
android:id="@+id/discountEditText" />
当我输入 EditText
正数时,一切正常文件,但是当我开始输入 -
时,EditText
不允许我输入任何其他内容。它只保留 -
。如何使其能够接收小数分隔符后最多 2 个符号的负小数?我也为另一个 EditText
设置了相同的过滤器:
quantityEditText.SetFilters(new IInputFilter[] { new DecimalFilter(3) });
我希望 EditText 不能为负数。
but when I start typing in - EditText doesn't allow me to enter nothing else.
原因是当你在-
后面输入另一个数字时,你的FilterFormatted
中的dest
的值只有“-”。在正则表达式中,您使用的是 [0-9]+
。这意味着它至少需要一个数字。所以它 returns 在 IsMatch
中是错误的。
输入-
时,dest
的值为空。所以 if 条件为真。
对于这个问题,你可以尝试在匹配字符串的时候加上source
。例如:
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);
}
}
I want that EditText not to be able to be negative.
我认为你需要使用新的过滤器。
例如:
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);
}
}