安卓EditText监听最近的词语


带关键短语提示的编辑器,其中获取临近词语以进行下一步提示就很有必要

代码

//正则匹配表达,当遇到以下中括号里的内容会停止继续获取,由此得到当前已输入的词
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)
}

运行结果

202301142034861

补充

//光标所在的当前行
val curLine = edt.layout?.getLineForOffset(s) ?: return@doOnTextChanged
//该行位置坐标信息
val lineBounds = Rect()
edt.getLineBounds(curLine, lineBounds)
//当前行的内容
val curLineContent = text.split('\n')[curLine]

声明:HEUE NOTE|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA 4.0协议进行授权

转载:转载请注明原文链接 - 安卓EditText监听最近的词语