Android Java开发计算器应用无法输入小数点和逗号问题咨询
问题出现的常见原因
- 布局文件中EditText的
inputType属性配置错误:最常见的是给输入框设置了inputType="number",该配置默认只允许输入0-9的整数,会直接禁用小数点、逗号等符号。 - 若配置的是
inputType="numberDecimal",部分系统原生键盘默认仅支持小数点作为小数分隔符,不支持逗号,需要额外配置分隔符规则才能正常输入。 - 自行实现的
InputFilter输入过滤器限制了可输入字符范围,不小心将小数点、逗号排除在了允许输入的字符集外。 - 系统键盘的语种适配问题:部分小语种键盘默认的小数分隔符和预期符号不匹配,导致无法触发对应符号的输入。
对应修复方案
- 先修改布局文件中对应EditText的
inputType属性,替换为允许小数输入的配置:
<EditText android:id="@+id/txtBirinciSayi" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="numberDecimal|numberSigned" />
- 如果需要同时支持逗号和小数点输入,可以给EditText添加自定义InputFilter:
InputFilter decimalFilter = new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { String allowedChars = "0123456789.,"; for (int i = start; i < end; i++) { if (!allowedChars.contains(String.valueOf(source.charAt(i)))) { return ""; } // 限制只能存在一个小数分隔符 char c = source.charAt(i); if (c == '.' || c == ',') { if (dest.toString().contains(".") || dest.toString().contains(",")) { return ""; } } } return null; } }; // 给两个输入框设置过滤器 birincisayi.setFilters(new InputFilter[]{decimalFilter}); ikincisayi.setFilters(new InputFilter[]{decimalFilter});
- 解析输入内容时统一分隔符格式,避免
Double.parseDouble抛出格式错误:
// 先把逗号替换为小数点再做解析 double sayi1 = Double.parseDouble(birincisayi.getText().toString().replace(',', '.')); double sayi2 = Double.parseDouble(ikincisayi.getText().toString().replace(',', '.'));
内容的提问来源于stack exchange,提问作者metaonder
相关产品推荐
相关产品推荐

