如何限制用户输入EditText(Xamarin.Android)中小数点分隔符后的最大2位或3位数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何限制用户输入EditText(Xamarin.Android)中小数点分隔符后的最大2位或3位数?相关的知识,希望对你有一定的参考价值。

我有以下课程:

public class DecimalFilter : Java.Lang.Object, IInputFilter
{
    //Pattern mPattern;
    String regex = "[0-9]+((\.[0-9]{0," + (2 - 1) + "})?)||(\.)?";
    public DecimalFilter(int digitsAfterZero)
    {
        //mPattern = Pattern.compile("[0-9]+((\.[0-9]{0," + (digitsAfterZero - 1) + "})?)||(\.)?");
        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))
        {
            return new Java.Lang.String(string.Empty);
        }
        return null;
    }
}

我有两个EditText,我在其上设置过滤器:

discountEditText.SetFilters(new IInputFilter[] { new DecimalFilter(2) });
quantityEditText.SetFilters(new IInputFilter[] { new DecimalFilter(3) });

当我运行应用程序并尝试在这些EditTexts中输入内容时,我甚至无法输入单个数字。

答案

试试这段代码:

public class DecimalFilter : Java.Lang.Object, IInputFilter
{
    String regex = "[0-9]+((\.[0-9]{0," + (2 - 1) + "})?)||(\.)?";
    public DecimalFilter(int digitsAfterZero)
    {
        //mPattern = Pattern.compile("[0-9]+((\.[0-9]{0," + (digitsAfterZero - 1) + "})?)||(\.)?"); 
        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(Xamarin.Android)中小数点分隔符后的最大2位或3位数?的主要内容,如果未能解决你的问题,请参考以下文章

如何限制 EditText 中的输入?

如何限制 EditText 输入只允许 3 位整数或小数

EditText中输入信息的限制的方法

android EditText maxLength 允许用户输入更多

EditText字符限制-字节数限制-一次截取超过限制部分

Xamarin.UITest 检索视图中的所有元素