编辑文本输入类型 phone - 只允许一位小数

Edit text input type phone - allow only 1 decimal

我正在尝试找到一种方法,在使用 phone 输入类型时只允许将一位小数输入到编辑文本中。

我知道使用 numberDecimal 输入时它会自动限制为 1 位小数,但我只希望用户可以使用数字键盘和小数。因此 phone 输入似乎最合适,但它允许用户键入尽可能多的“.”。如他们所愿。

有什么办法可以避免这种情况吗?例如,检查编辑文本是否已包含“.”。如果是这样-不允许输入另一个?

你可以听EditTexttextChanged,然后估计它是否已经包含.

如果是,保留之前的值,如果不是,允许其在下面输入新的value.like:

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);
            }
        }

    }
 }