如何使我的InputConnection支持完美地组成?

时间:2019-02-07 08:19:24

标签: java android editor inputconnection

我目前正在使用自定义文本视图(不扩展文本视图),该视图具有较高的绘制速度,而现在我在输入连接(或确切地说,组合)方面遇到了一些非常棘手的问题。

我想在编辑器中支持撰写,但是我发现更新了游标时,即使我调用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

0 个答案:

没有答案