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 方法吗?