我目前正在开发一个输入法,它需要知道文本内容才能计算出光标所在的行和字符等信息。这适用于全屏模式下的提取文本,但我希望不必强制全屏。这是我当前实现的相关代码:
private ExtractEditText mExtract;
...
mExtract = new ExtractEditText(this);
mExtract.setId(android.R.id.inputExtractEditText);
setExtractView(mExtract);
...
@Override public void onUpdateSelection(int oldSelStart, int oldSelEnd, int newSelStart, int newSelEnd, int candidatesStart, int candidatesEnd) {
super.onUpdateSelection(oldSelStart, oldSelEnd, newSelStart, newSelEnd, candidatesStart, candidatesEnd);
String textToMeasure = mExtract.getText().toString().substring(0, newSelStart);
Log.w("myIME", "Line: " + countLines(textToMeasure));
}
最佳答案
我查看了InputMethodService的源代码,发现它如何提取文本以供ExtractEditText使用,因此我能够创建一个解决方案:
private String getExtractText() {
ExtractedTextRequest req = new ExtractedTextRequest();
req.token = 0;
req.flags = InputConnection.GET_TEXT_WITH_STYLES;
req.hintMaxLines = 10;
req.hintMaxChars = 10000;
ExtractedText et = getCurrentInputConnection().getExtractedText(req, InputConnection.GET_EXTRACTED_TEXT_MONITOR);
return et.text.toString();
}
关于Android IME,获取EditText实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6873577/