c# - 如何在 C#(MonoDroid) 中将 EditText 长度限制为 6 个整数和 3 个小数位?
问题描述
你好,我是新来的,别那么难,我正在使用c#在Xamarin.Andriod中创建一个项目。
我正在尝试对 Xamarin.Android(C#/MonoDroid)中的 EditText 进行验证。
我必须满足的条件如下:'它允许输入 6 个整数和 3 个小数位,范围从 0 到 999999.999'
我在java中找到了一些可能的解决方案(我不太了解,也无法在C#中实现它们),它们如下:
我不知道如何在 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#
我很感激我花了几天时间在这方面的任何帮助。
非常感谢你的帮助。
解决方案
它允许输入 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) });
推荐阅读
- angular - 使用 http 和其他依赖项进行 Angular 服务测试
- vba - VBA 复制数据透视表并删除与数据的连接
- javascript - 当 li 选择添加类到 div
- javascript - 如何为Javascript游戏制作开始菜单?
- android - Android DataBinding:即使生成也无法访问 LayoutNameDataBinding
- sql - 使用当前计数和时间戳列添加先前的加载计数
- javascript - JS for循环中是否有redo语句?
- azure - 使用数据工厂将表从 SAP BW 提取到 Azure Data Lake Gen2
- python - 根据拆分后的模式拆分文件的最简单方法是什么?
- python - 使用 uwsgi 时出现 conda env 问题