我的编辑文本格式有以下代码,因为它可以接受任何输入,所以我没有设置任何输入类型:
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 切换键进行切换
任何帮助/建议为什么会发生这种情况(在少数设备上)以及如何纠正它??
终于让它工作了,必须结合上面评论中提到的多个解决方案
由于有罪的是 settext,我找到了它的替代品 - 追加
但要使用追加,我必须清除编辑文本而不使用settext,此链接来救援
所以更换了
cardNumberEditText.setText(formattedNumber);
与
cardNumberEditText.getText().clear();
cardNumberEditText.append(formattedNumber);
现在就像魅力一样
我也遇到了类似的问题,但是在我拨打电话后键盘已更改为默认值 显示键盘时
scrollView.fullScroll(NestedScrollView.FOCUS_DOWN)
我刚刚将 fullScroll
方法替换为 smoothScrollTo
,一切正常
除了已接受的答案之外,如果其他人在
.append()
之后难以将光标移动到末尾,以下是保留光标位置的方法:
val cursor = editText.selectionEnd
editText.text?.clear()
editText.append(input)
editText.setSelectionSafe(cursor)
其中
setSelectionSafe()
是我用来防止挤压的扩展
fun EditText?.setSelectionSafe(index: Int) {
if (this == null || index > this.length()) return
this.setSelection(index)
}
这对于输入和删除都有效!