带关键短语提示的编辑器,其中获取临近词语以进行下一步提示就很有必要
代码
//正则匹配表达,当遇到以下中括号里的内容会停止继续获取,由此得到当前已输入的词
private val exceptRegex = "[ \\n;,.)/(\'\"]".toRegex()
fun initOnWord(editText: EditText, onWord: (String)->Unit) {
editText.doOnTextChanged { text, start, before, count ->
//字符串为null不继续
if (text == null) return@doOnTextChanged
//输入文字继续
val aboveWord = StringBuffer("")
var abovePos = editText.selectionStart - 1
while (true) {
if (abovePos < 0) break
val c = text[abovePos--]
if (exceptRegex.matches(c.toString())) {
break
}
aboveWord.insert(0, c)
}
//aboveWord就是得到的输入的最近的词
onWord(aboveWord.toString())
}
}
使用
initOnWord(edt) {
L.i("得到词语", it)
}
运行结果
补充
//光标所在的当前行
val curLine = edt.layout?.getLineForOffset(s) ?: return@doOnTextChanged
//该行位置坐标信息
val lineBounds = Rect()
edt.getLineBounds(curLine, lineBounds)
//当前行的内容
val curLineContent = text.split('\n')[curLine]
Comments | NOTHING