Xamarin.Android(C#):输入时为EditText文本添加分隔符的方法
解决EditText AfterTextChanged中无法输入小数点的问题
我太懂这个痛点了——输入小数点时刚敲完就被格式化掉,根本没法开始输入小数部分。这是因为当文本是纯.、.xxx这类不完整的小数状态时,double.TryParse会直接把它解析成0,格式化后就变成了不带小数点的字符串,直接覆盖了你的输入。
给你调整后的代码方案,专门处理这些特殊的输入状态:
double value = 0; string currentText = Text; // 情况1:用户只输入了小数点".",直接保留,让用户可以继续输入小数部分 if (currentText.Equals(".")) { SetSelection(currentText.Length); return; } // 情况2:用户输入了".xxx"(开头是小数点的不完整小数),补0后再格式化 else if (currentText.StartsWith(".") && currentText.Length > 1) { string correctedText = "0" + currentText; if (double.TryParse(correctedText, NumberStyles.Any, this.InternalCulture, out value)) { string formattedString = NumberFormat.GetNumberInstance(CultureInfo).Format(value); Text = formattedString; SetSelection(Text.Length); } return; } // 情况3:用户输入了"xxx."(末尾带小数点的不完整小数),保留小数点 else if (currentText.EndsWith(".") && currentText.Length > 1) { // 先验证去掉小数点后的部分是有效数字,再保留原文本 if (double.TryParse(currentText.TrimEnd('.'), NumberStyles.Any, this.InternalCulture, out _)) { SetSelection(currentText.Length); return; } } // 正常完整数值的格式化逻辑 if (double.TryParse(currentText, NumberStyles.Any, this.InternalCulture, out value)) { string formattedString = NumberFormat.GetNumberInstance(CultureInfo).Format(value); if (!formattedString.Equals(currentText)) { Text = formattedString; } SetSelection(Text.Length); }
代码说明:
- 纯小数点处理:当用户只输入
.时,跳过格式化逻辑,直接定位光标,让用户可以继续输入小数位。 - 开头小数点处理:比如输入
.123时,自动补成0.123再格式化,既符合数值规范,又不会吃掉用户的输入意图。 - 末尾小数点处理:输入
123.时,保留这个小数点,让用户可以继续输入后续的小数部分,不会被格式化回123。 - 正常数值处理:对于完整的数值(比如
123.45),依然保留你原来的格式化逻辑,确保显示符合文化格式要求。
这样调整后,用户输入小数的整个流程就顺畅了,不会再出现小数点被莫名吃掉的情况。
内容的提问来源于stack exchange,提问作者Muneesh Kumar
相关产品推荐
相关产品推荐

