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