编辑文本输入类型电话--只允许1个小数。

问题描述 投票:0回答:1

我试图找到一种方法,在使用电话输入类型的同时,只允许在编辑文本中输入1个小数。

我知道它自动限制使用数字-小数输入的1位小数,但我只想让用户使用数字键盘和小数。因此,电话输入似乎是最合适的,但它允许用户输入他们想要的任何数量的'.'。

有什么方法可以防止这种情况的发生吗?例如,检查编辑文本是否已经包含'.',如果是,则不允许输入另一个'.'。

android xamarin text edit
1个回答
0
投票

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

如果是,则保留之前的值,如果不是,则允许它输入新的值,如下图。

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

    }
 }
© www.soinside.com 2019 - 2024. All rights reserved.