android - edittext.settext() 将键盘类型更改为默认值 [从 ?123 到 ABC]

标签 android keyboard android-edittext android-softkeyboard

我的 edittext 格式有以下代码,因为它可以接受任何输入我没有设置任何输入类型:

if (cardNumberEditText != null) {
    cardNumberEditText.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            int currSel = cardNumberEditText.getSelectionStart();
            cardNumberEditText.removeTextChangedListener(textWatcher);
            .
            .
            cardNumberEditText.setText(formattedNumber);
            .
            .
            cardNumberEditText.setSelection(currSel);
            cardNumberEditText.addTextChangedListener(textWatcher);
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
}

所以最初我得到的默认输入类型是 ABC,现在当我将它更改为 ?123(使用 ABC/123? 切换按钮)并在输入一些数字后键盘变回 ABC。此代码在三星设备 s3 和 sywpe 上运行良好,但在与 L 和 HTC one 的 nexus 上运行不佳

当我注释 onTextChanged 中的所有代码时,它工作正常。所以当我调查时,我发现罪魁祸首是 cardNumberEditText.setText(formattedNumber);

我没有设置任何输入类型,我只是使用键盘上的 ABC/?123 切换键进行切换

任何帮助/建议为什么会发生这种情况(在少数设备上)以及我该如何纠正它??

最佳答案

最终成功了,不得不结合上面评论中提到的多个解决方案

因为 guilty 是 settext,所以我找到了它的替代品 - append

但要使用追加,我必须在不使用 settext 的情况下清除 edittext,this link救援

所以替换

cardNumberEditText.setText(formattedNumber);

cardNumberEditText.getText().clear();
cardNumberEditText.append(formattedNumber);

现在就像一个魅力

关于android - edittext.settext() 将键盘类型更改为默认值 [从 ?123 到 ABC],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26365808/

相关文章:

ios - 禁用键盘上的键

iphone - UITextField 停止摇动事件?

java - EditText 不出现复制粘贴选项

android - 在 AlertDialog 的 editText 中如何以及在何处添加 setError

android - 位图的大小和方向不正确

java - 访问安全系统设置

android - MDM 可以限制用户更改日期时间设置吗

java - android.view.ViewRoot$CalledFromWrongThreadException :

javascript - 如何使用 Javascript 更改页面以进行键盘导航?

java - TextWatcher.onTextChanged() 如何处理预测文本?