Android - 逗号作为数字键盘上的小数分隔符
Posted
技术标签:
【中文标题】Android - 逗号作为数字键盘上的小数分隔符【英文标题】:Android - Comma as decimal separator on Numeric Keyboard 【发布时间】:2012-06-16 02:17:06 【问题描述】:我们需要为EditText
配备一个数字键盘。键盘应具有基于设备所选区域设置的小数分隔符。我们通过将自定义 DigitsKeyListener
设置为 EditText
来实现这一点
public class NumericDigitsKeyListener extends DigitsKeyListener
@Override
protected char[] getAcceptedChars()
char[] acceptedCharacters = null;
acceptedCharacters = new char[]
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
new DecimalFormatSymbols(Locale.getDefaultLocale()).getDecimalSeparator()
return acceptedCharacters;
/**
* @see android.text.method.DigitsKeyListener#getInputType()
*/
public int getInputType()
return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL;
以上内容似乎适用于大多数设备,但对于三星 Galaxy S-II,软键盘的键盘中没有逗号。设备的 swype 键盘显示逗号,但默认键盘没有。
我已尝试覆盖 here 中提到的 DigitsKeyListener
有没有一种方法可以强制所有设备在数字键盘上使用逗号(如果适用,甚至总是)?
【问题讨论】:
我对这个问题的解决方法在这里:https://***.com/a/63520135/11033601 【参考方案1】:我认为你的代码和使用有同样的问题:
android:inputType="numberDecimal" android:digits="0123456789,"
(除了你的代码更通用)
问题 - 据我了解,当 inputType 为 numberDecimal 时,某些键盘不尊重 digits 属性。这是documented bug,我发现避免这种行为的唯一方法是使用 inputType="text" 并设置输入过滤器来限制字符。当然,键盘不适合数字,但找不到更好的解决方案。过滤器是这样的:
mEditText.setFilters(new InputFilter[] new DecimalInputFilter() );
public class DecimalInputFilter implements InputFilter
private static final String ALLOWED_CHARS = "0123456789,";
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
if (source instanceof SpannableStringBuilder)
final SpannableStringBuilder sourceAsSpannableBuilder = (SpannableStringBuilder)source;
for (int i = end - 1; i >= start; i--)
final char currentChar = source.charAt(i);
if (!StringUtils.contains(ALLOWED_CHARS, currentChar))
sourceAsSpannableBuilder.delete(i, i+1);
return source;
else
final StringBuilder filteredStringBuilder = new StringBuilder();
for (int i = 0; i < end; i++)
final char currentChar = source.charAt(i);
if (StringUtils.contains(ALLOWED_CHARS, currentChar))
filteredStringBuilder.append(currentChar);
return filteredStringBuilder.toString();
【讨论】:
以上是关于Android - 逗号作为数字键盘上的小数分隔符的主要内容,如果未能解决你的问题,请参考以下文章
如何格式化数据库中的双精度数据并在 Android 上使用逗号作为小数分隔符设置到 Textview
为啥 Android 的 NumberFormat 使用逗号作为澳大利亚的小数分隔符?