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

Posted

技术标签:

【中文标题】edittext.settext() 将键盘类型更改为默认值 [从 ?123 到 ABC]【英文标题】:edittext.settext() changes the keyboard type to default [ from ?123 to ABC] 【发布时间】:2014-12-09 13:00:29 【问题描述】:

我的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 切换键进行切换

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

【问题讨论】:

你不是告诉它通过输入数字来调出数字键盘吗?还是我不明白? 不,我不是通过为输入类型编写任何代码来告诉它,我使用键盘键 ABC/123 在它们之间切换 终于找到答案了here,试试看 不幸的是,上面的那个对我来说效果不佳,还有其他更好的解决方案吗??? 找到了一个 more 解决方案,使用 append 而不是 settext,但仍然不适用于我的情况,因为我正在进行卡片格式化,我需要在最后设置 text 【参考方案1】:

终于搞定了,必须结合上述 cmets 中提到的多种解决方案

因为有罪的是 settext,所以我找到了一个替代品 - 追加

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

换了

cardNumberEditText.setText(formattedNumber);

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

现在像魅力一样工作

【讨论】:

append 在我的场景中帮助了我。->edittext 有一些输入 enetered.settext 将删除/清除整个输入。用新的 settext 值替换。如果您不想删除输入,请使用 append。 不幸的是,这会导致 Galaxy S III 4.3 无法正确清除以前的文本,并且有问题的设备会两次附加文本,但我在 afterTextChanged(Editable s) 中使用 s.replace(0, s.length(), formatted, 0, formatted.length()); 得到了很好的结果。 Append 方法正在修复键盘切换行为。但是有一个小问题。我的编辑文本是数字的,因为我想阻止用户输入除数字以外的任何内容。当我使用 settext 时,我可以设置一个包含空格字符的文本。当我使用附加时,它不允许我附加任何东西,但数字 8( 你拯救了我的一天 @EvrenOzturk 这将通过在 xml 中添加 android:digits="0123456789 " 来解决,显然您附加的任何内容都会被 android:inputType 过滤,但过滤器将与 android:digits 进行“或”运算【参考方案2】:

我遇到了类似的问题,但是在我打电话后键盘被更改为默认值 scrollView.fullScroll(NestedScrollView.FOCUS_DOWN) 显示键盘时 我刚刚将 fullScroll 方法替换为 smoothScrollTo 并且一切正常

【讨论】:

以上是关于edittext.settext() 将键盘类型更改为默认值 [从 ?123 到 ABC]的主要内容,如果未能解决你的问题,请参考以下文章

我可以在使用自定义键盘时访问 EditText setText 方法吗?

如何在editText.setText()中插入一个字符串

editText.setText仅在一个活动中起作用

DialogFragment - 访问布局组件的位置[即editText.setText(“”)]

android怎么显示EditText内容

android自定义edittext 当有文字时怎么禁止长按全选事件