逗号在三星Android键盘上不起作用

4c8rllxm  于 2022-11-27  发布在  Android
关注(0)|答案(1)|浏览(185)

我把InputType.TYPE_NUMBER_FLAG_DECIMAL or InputType.TYPE_CLASS_NUMBER设置为EditText,我想用逗号作为小数点分隔符,所以我把数字"0123456789.,"设置为EditText。

editText.keyListener = DigitsKeyListener.getInstance("0123456789.,")

我在EditText上设置了一个TextWatcher来处理用户输入。当我在Android模拟器键盘上点击逗号(“,”)时,它按预期工作,但如果我在我的手机上构建,它有三星键盘,逗号键被禁用,不工作。我搜索了这么多,但我找不到一个方法。
你对这个问题有什么想法吗?

yh2wf1be

yh2wf1be1#

现在是2022年,这个问题仍然存在(至少在三星设备上):)
因此,我通过在 EditText 中添加一个 TextChangedListener 来解决这个问题,并检查最后输入的字符是否等于(特定于国家的)千位分隔符。如果是,我将其替换为特定于国家的小数分隔符:

public class EditTextTausenderErsetzer implements TextWatcher{
 ...
    @Override
    public void afterTextChanged(Editable editable) 
    {
      // determine country specific separators
      // char thousandsSep = .., char commaSep =..

      int comma_index = editable.toString().indexOf(commaSep);
        if(comma_index == -1) {  // no comma so far, thus there might be a "." which shall be a comma separator
         if (editable.toString().indexOf(thousandsSep) != -1) {
            if (editable.toString().indexOf(thousandsSep, (editable.length()-1)) == (editable.length() - 1)) {
                    editable.delete(editable.length() - 1, editable.length() - 1);
                    editable.insert(editable.length(), commaSep + "");

                }
            }
        }
        // ...
        // do other stuff like setting automatically thousands separators

如果您的应用管理千位分隔符,并且您不允许用户设置这些分隔符,则此解决方案有效。

相关问题