编辑文本输入类型 phone - 只允许一位小数
Edit text input type phone - allow only 1 decimal
我正在尝试找到一种方法,在使用 phone 输入类型时只允许将一位小数输入到编辑文本中。
我知道使用 numberDecimal 输入时它会自动限制为 1 位小数,但我只希望用户可以使用数字键盘和小数。因此 phone 输入似乎最合适,但它允许用户键入尽可能多的“.”。如他们所愿。
有什么办法可以避免这种情况吗?例如,检查编辑文本是否已包含“.”。如果是这样-不允许输入另一个?
你可以听EditText
的textChanged
,然后估计它是否已经包含.
。
如果是,保留之前的值,如果不是,允许其在下面输入新的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);
}
}
}
}
我正在尝试找到一种方法,在使用 phone 输入类型时只允许将一位小数输入到编辑文本中。
我知道使用 numberDecimal 输入时它会自动限制为 1 位小数,但我只希望用户可以使用数字键盘和小数。因此 phone 输入似乎最合适,但它允许用户键入尽可能多的“.”。如他们所愿。
有什么办法可以避免这种情况吗?例如,检查编辑文本是否已包含“.”。如果是这样-不允许输入另一个?
你可以听EditText
的textChanged
,然后估计它是否已经包含.
。
如果是,保留之前的值,如果不是,允许其在下面输入新的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);
}
}
}
}