更新时间:2023-10-13 22:31:04
更新提取的文本视图的关键是设置ExtractedTextRequest
令牌.没有令牌,更新将不会生效.感谢此答案以获取有关令牌的帮助.
The key to updating the extracted text view is to set the ExtractedTextRequest
token. Without the token the updates don't take effect. Thanks to this answer for help with the token.
我们可以使用request.token
在输入连接的getExtractedText()
中标记令牌,然后将方法添加到自定义视图中进行设置:
We can the token in the input connection's getExtractedText()
with request.token
and then add a method to the custom view to set it:
@Override
public ExtractedText getExtractedText(ExtractedTextRequest request, int flags) {
if (request == null)
return null;
Editable editable = getEditable();
if (editable == null) {
return null;
}
// passing the token to the custom view here
mMongolEditText.setExtractedTextToken(request.token);
int selStart = Selection.getSelectionStart(editable);
int selEnd = Selection.getSelectionEnd(editable);
ExtractedText extract = new ExtractedText();
extract.flags = 0;
extract.partialStartOffset = -1;
extract.partialEndOffset = -1;
extract.selectionStart = selStart;
extract.selectionEnd = selEnd;
extract.startOffset = 0;
if ((request.flags & GET_TEXT_WITH_STYLES) != 0) {
extract.text = new SpannableString(editable);
} else {
extract.text = editable.toString();
}
return extract;
}
这使我可以在自定义视图中调用InputMethodManager.updateExtractedText()
时使用令牌.
That allows me to use the token when I call InputMethodManager.updateExtractedText()
from within my custom view.
private int mExtractedTextRequestToken = 0;
void setExtractedTextToken(int token) {
mExtractedTextRequestToken = token;
}
private void reportExtractedText() {
int requestToken = mExtractedTextRequestToken;
ExtractedText et = new ExtractedText();
final CharSequence content = getText();
final int length = content.length();
et.partialStartOffset = -1;
et.partialEndOffset = -1;
et.startOffset = 0;
et.selectionStart = getSelectionStart();
et.selectionEnd = getSelectionEnd();
et.flags = 0;
et.text = content.subSequence(0, length);
InputMethodManager imm = (InputMethodManager) getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm == null) return;
imm.updateExtractedText(this, requestToken, et);
}
您可以在这里查看我的完整代码:
You can view my full code here: