В настоящее время я работаю над пользовательским текстовым представлением (не расширяющим текстовое представление), которое имеет более высокую скорость рисования, в то время как сейчас у меня возникают некоторые действительно сложные проблемы с входным соединением (или, точнее, составлением).
Я хочу поддержать компоновку в моем редакторе, но я обнаружил, что InputMethodEngine не вызывает 'setComposingRegion' или 'setComposingText', когда мой курсор обновляется, даже если я вызвал метод viewClicked для InputMethodManager.Составляющий текст просто останься там!
Например, я щелкнул слово «он» в моем редакторе, а затем появляется InputMethod и отображает серьезные тексты сочинения «он», такие как «ад» или «привет».
Затем я щелкнул слово «в» в моем редакторе, но InputMethod не вызывает «setComposingRegion» или «setComposingText», он просто продолжает показывать тексты «он»!
Я использую эмулятор 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 продолжит отображать предыдущую композицию