如何在android编辑文本中侦听enter键?

如何在android编辑文本中侦听enter键?,android,kotlin,android-edittext,Android,Kotlin,Android Edittext,在安卓系统中,您如何(通过模拟设备键盘,而不是计算机键盘)收听回车键?我尝试过许多解决方案,包括使用onEditorActionListener执行各种不同的IME操作,使用onKeyListener执行Action.DOWN或KeyEvent.KEYCODE\u ENTER,以及这两种方法的几十种变体 将编辑文本设置为单行是可行的,但我希望编辑文本是多行的,并且在按下enter键时仍然创建新行。其他几个答案在不同程度上起作用,但没有一个能满足我的要求:android仿真器键盘输入键可以正常工作

在安卓系统中,您如何(通过模拟设备键盘,而不是计算机键盘)收听回车键?我尝试过许多解决方案,包括使用onEditorActionListener执行各种不同的IME操作,使用onKeyListener执行Action.DOWN或KeyEvent.KEYCODE\u ENTER,以及这两种方法的几十种变体


将编辑文本设置为单行是可行的,但我希望编辑文本是多行的,并且在按下enter键时仍然创建新行。其他几个答案在不同程度上起作用,但没有一个能满足我的要求:android仿真器键盘输入键可以正常工作(创建新行),但也可以监听以触发我自己的方法

我知道这个问题被问了很多次,但在我的代码中没有一个答案是有效的

这是我目前的基本代码

characterNotesEditText.setOnEditorActionListener { _, actionId, event ->
        Log.i("FragmentActivity", "It works")
        return@setOnEditorActionListener true
    }

如果在笔记本电脑上按enter键,它将触发日志,但如果以前按过enter键,则仅在仿真器键盘上触发日志。这只工作了一次,然后在仿真器键盘上按enter键什么也不做。

最后我放弃了使用按键监听器或ime动作监听器,根据Commonware的建议,我使用了一个textwatcher来跟踪新行

下面的代码是我的最终解决方案,用例是查找何时创建新行,并自动缩进它。“toDelete”布尔值用于确保缩进中的退格是可能的

 override fun beforeTextChanged(text: CharSequence?, p1: Int, p2: Int, p3: Int) {
    val string: String = text.toString()
    toDelete = string.length > 1 && string[string.length - 2] == '\n'
}

override fun onTextChanged(
    txt: CharSequence,
    start: Int,
    before: Int,
    count: Int
) {
    if (!toDelete) {
        val string: String = txt.toString()
        if (string.isNotEmpty() && string[string.length - 1] == '\n') {
            if (editText.selectionStart == txt.length || editText.selectionEnd == txt.length) {
                editText.text.append("    ")
            }
        }
    }
}

“其他几个答案在不同程度上起作用,但没有一个能满足我的要求:android仿真器键盘输入键可以正常工作(创建新行),但也可以听到它来触发我自己的方法”——我怀疑这不是一个直接的选项。在多行模式下,IME可能认为它使用了该按键。您可能需要使用
TextWatcher
并查看新行。谢谢,我会在早上试试看它是否有效