首页 > 解决方案 > 如何在 C#(MonoDroid) 中将 EditText 长度限制为 6 个整数和 3 个小数位?

问题描述

你好,我是新来的,别那么难,我正在使用c#在Xamarin.Andriod中创建一个项目。

我正在尝试对 Xamarin.Android(C#/MonoDroid)中的 EditText 进行验证。

我必须满足的条件如下:'它允许输入 6 个整数和 3 个小数位,范围从 0 到 999999.999'

我在java中找到了一些可能的解决方案(我不太了解,也无法在C#中实现它们),它们如下:

使用 Java 的 TextWatcher

使用 Java 的输入过滤器

我不知道如何在 C# 中应用它,如果有人可以解释或给我一个简单的例子,但在 C# 中。

这是我的编辑文本:

                    ```<EditText
                        android:id="@+id/etVolume"
                        android:layout_width="@dimen/value_zero"
                        android:hint="Volumen"
                        android:textColor="@color/grisPrimario"
                        android:layout_height="fill_parent"
                        android:layout_weight="5"
                        android:textSize="@dimen/fluidListItem_text_size"
                        android:inputType="numberDecimal"
                        android:maxLength ="9"
                        android:textColorHint="@android:color/darker_gray"
                        android:backgroundTint="@color/grisPrimario"
                        android:gravity="bottom"
                        android:layout_marginBottom="-3dp"
                        android:layout_marginRight="@dimen/fluidListItemMarginRight"/>```

我的片段是这样定义的这个EditText:

Volume = itemAdministeredFluid.FindViewById<EditText>(Resource.Id.etVolume);

etVolume.setFilters(new Android.Text.IInputFilter[] {new DecimalDigitsInputFilter(6,3)});

但我不明白如何实现该方法。

我看到他们使用 java 使用“TextWatcher”和“InputFilter”,但我不明白如何将其更改为 C#

我很感激我花了几天时间在这方面的任何帮助。

非常感谢你的帮助。

标签: c#androidxamarin.androidandroid-edittextandroid-input-filter

解决方案


它允许输入 6 个整数和 3 个小数位,范围从 0 到 999999.999'

我创建了 IInputFilter ,你可以看看:

 public class DecimalDigitsInputFilter : Java.Lang.Object, IInputFilter
{
    private double _min = 0;
    private double _max = 0;

    public DecimalDigitsInputFilter(double min, double max)
    {
        _min = min;
        _max = max;
    }

    public ICharSequence FilterFormatted(ICharSequence source, int start, int end, ISpanned dest, int dstart, int dend)
    {
        try
        {
            string val = dest.ToString().Insert(dstart, source.ToString());
            if (val.Contains("."))
            {
                string[] array = val.Split(".");
                string value1 = array[0].ToString();
                string value2 = array[1].ToString();

                if (value1.Length > 6|| value1=="")
                {                      
                }
                else
                {
                    if(value2!="" && value2.Length<=3)
                    {
                        double input = double.Parse(val);
                        if (IsInRange(_min, _max, input))
                            return null;

                    }
                    else if(value2=="")
                    {
                        if(IsInRange(_min,_max,double.Parse(value1)))
                        {
                            return null;
                        }
                    }                      
                }
            }
            else
            {
               if(val.Length<=6)
                {
                    double input = double.Parse(val);
                    if (IsInRange(_min, _max, input))
                        return null;
                }                                   
            }                 

        }
        catch (System.Exception ex)
        {
            Console.WriteLine("FilterFormatted Error: " + ex.Message);
        }

        return new Java.Lang.String(string.Empty);


    }
    private bool IsInRange(double min, double max, double input)
    {
        return max > min ? input >= min && input <= max : input >= max && input <= min;
    }
}

 edittext1 = FindViewById<EditText>(Resource.Id.editText1);
 edittext1.SetFilters(new Android.Text.IInputFilter[] {new DecimalDigitsInputFilter(0,999999.999) });

推荐阅读