我目前正在使用自定义文本视图(不扩展文本视图),该视图具有较高的绘制速度,而现在我在输入连接(或确切地说,组合)方面遇到了一些非常棘手的问题。
我想在编辑器中支持撰写,但是我发现更新了游标时,即使我调用InputMethodManager的“ viewClicked”方法,InputMethodEngine也不会调用“ setComposedRegion”或“ setComposedText”。撰写的文字只留在那里!
例如,我在编辑器中单击“ he”一词,然后出现InputMethod并显示由“ he”组成的严肃文本,例如“ hell”或“ hello”。
然后,我在编辑器中单击了“ by”一词,但InputMethod不会调用“ setComposedRegion”或“ setComposedText”,它只会继续显示“他”的组成文本!
我正在使用Emulator Pixel(API 28,x86)。正如AndroidAPI所说,我还调用了“ updateSelection”并在“ onCreatInputConnection”中提供了initialSelStart / End值,但它也不起作用。
public void onClick() {
.....
if (_IMM != null) {
_IMM.viewClicked(this);
_IMM.showSoftInput(this, 0);
onCursorUpdate();
}
.....
}
private void onCursorUpdate() {
if (_IMM != null)
_IMM.updateSelection(this, _SStart, (_SStart == -1) ? -1 : _SEnd, _ComposingStart, (_ComposingStart == -1) ? -1 : _ComposingEnd);
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
outAttrs.imeOptions = EditorInfo.IME_NULL
| EditorInfo.IME_FLAG_NO_ENTER_ACTION
| EditorInfo.IME_FLAG_NO_FULLSCREEN
| EditorInfo.IME_FLAG_NO_ACCESSORY_ACTION;
outAttrs.inputType = EditorInfo.TYPE_MASK_CLASS
| EditorInfo.TYPE_CLASS_TEXT
| EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE
| EditorInfo.TYPE_TEXT_FLAG_IME_MULTI_LINE;
outAttrs.initialSelStart = _SStart;
outAttrs.initialSelEnd = (_SStart == -1) ? -1 : _SEnd;
if (_InputConnection == null)
_InputConnection = new VInputConnection(this);
_isComposing = false;
return _InputConnection;
}
我希望IME(InputMethodEngine)会像我称为“ viewClicked”那样更改其组成区域,但不会。
在这里列出图片:
Click a word and IME appear
Click another word but IME keep displaying the previous composing