我试图找到一种方法,在使用电话输入类型的同时,只允许在编辑文本中输入1个小数。
我知道它自动限制使用数字-小数输入的1位小数,但我只想让用户使用数字键盘和小数。因此,电话输入似乎是最合适的,但它允许用户输入他们想要的任何数量的'.'。
有什么方法可以防止这种情况的发生吗?例如,检查编辑文本是否已经包含'.',如果是,则不允许输入另一个'.'。
你可以听 textChanged
的 EditText
,然后估计它是否已经包含 .
.
如果是,则保留之前的值,如果不是,则允许它输入新的值,如下图。
public class MainActivity : AppCompatActivity,ITextWatcher
{
private string stringBefore;
private int inputPosition;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
EditText editText = FindViewById<EditText>(Resource.Id.edit);
editText.AddTextChangedListener(this);
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
public void AfterTextChanged(IEditable s)
{
}
public void BeforeTextChanged(ICharSequence s, int start, int count, int after)
{
stringBefore = s.ToString(); //the value before you input
inputPosition= start; //the postion you input
}
public void OnTextChanged(ICharSequence s, int start, int before, int count)
{
if (s.Length() > stringBefore.Length) //estimate whether you are typing or deleting
{
if (s.CharAt(afterPosition) == '.' && stringBefore.Contains('.')) //estimate you are typing '.' and if already contains '.'
{
editText.Text = stringBefore;
editText.SetSelection(stringBefore.Length - 1);
}
}
}
}