Как сделать так, чтобы моя поддержка InputConnection создавалась идеально?
В настоящее время я работаю над пользовательским текстовым представлением (не расширяющим текстовое представление), которое имеет более высокую скорость рисования, в то время как сейчас у меня возникают некоторые действительно сложные проблемы с Input-connection (или, точнее, с Composing).
Я хочу поддерживать компоновку в моем редакторе, но обнаружил, что InputMethodEngine не вызывает 'setComposingRegion' или 'setComposingText', когда мой курсор обновляется, даже если я вызывал метод viewClicked для InputMethodManager. Составляющий текст просто останься там!
Например, я щелкнул слово "он" в моем редакторе, а затем появляется InputMethod и отображает серьезные тексты сочинения "он", такие как "ад" или "привет".
Затем я щелкнул слово "by" в моем редакторе, но InputMethod не вызывает "setComposingRegion" или "setComposingText", он просто продолжает отображать тексты "he"!
Я использую Эмулятор Pixel (API 28, x86). Я также назвал "updateSelection" и предоставил значение initialSelStart/End в "onCreatInputConnection", как говорит AndroidAPI, но оно также не работает.
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', но это не так.
Вот список картинок:
Нажмите на слово и появится IME
Нажмите другое слово, но IME продолжает отображать предыдущее сочинение