我通过扩展EditText
创建了自定义android.widget.EditText
。
当EditText
具有焦点时,我希望仅显示自动正确的跨度。所以我在构造函数中调用setInputType(INPUT_NO_FOCUS);
并且:
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
if (focused) {
setInputType(INPUT_FOCUS);
} else {
setInputType(INPUT_NO_FOCUS);
}
}
使用:
private final int INPUT_NO_FOCUS = TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE
| InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
private final int INPUT_FOCUS = TYPE_CLASS_TEXT | TYPE_TEXT_FLAG_MULTI_LINE
| InputType.TYPE_TEXT_FLAG_AUTO_CORRECT | InputType.TYPE_TEXT_FLAG_AUTO_COMPLET;
==>确实没有自动更正和自动完成,但在点击EditText
后不会显示。输入类型已成功更改。
如何触发自动更正/添加自动完成功能?
//编辑:
用户案例我想存档:
MyEditText extends EditText
视图但未关注。文本上没有拼写检查( - >文本下没有红色跨度/行)
用户点击编辑字段即可。 - >拼写检查被触发 - >出现红线(用户可以点击拼写错误的单词并让操作系统更正)
用户点击另一个View元素 - >红线/跨度消失。
答案 0 :(得分:2)
我担心没有好办法做到这一点。问题是Android框架实际上没有一种机制来在输入类型发生变化时告诉键盘。键盘通常在字段打开时检查类型。在那之后,如果类型改变,它将不会知道,除非它轮询它,我不认为任何现有的键盘这样做。
答案 1 :(得分:0)
在MyEditText类中重写此方法
@Override
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
super.onTextChanged(text, start, lengthBefore, lengthAfter);
setInputType(INPUT_FOCUS);
}
使用此方法,您可以将EditText的inputType更改为INPUT_FOCUS,当用户编辑MyEditText的文本时,该文本在文本下显示红线