【问题标题】:How to listen for Key input from User?如何监听用户的按键输入?
【发布时间】:2019-06-04 14:28:17
【问题描述】:

我设法让一个警报对话框弹出一个 editText 来处理来自用户的输入。当他们在键盘上按 Enter 时,我将如何处理提交过程?我想避免使用按钮提交和更改文本。希望我提供了足够的细节,因为我对此还是很陌生。感谢您的宝贵时间。

Phone App Pic

警报对话框:

(1..912).forEach {
        val id = resources.getIdentifier("Price$it", "id", packageName)
        val tv = findViewById<TextView>(id)
        tv.setOnLongClickListener {

            //Alert Window
            val alertDialog = AlertDialog.Builder(this@MainActivity)
            alertDialog.setTitle("NEW PRICE")
            val input = EditText(this@MainActivity)
            val lp = LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.MATCH_PARENT
            )
            input.layoutParams = lp
            alertDialog.setView(input).show()
            return@setOnLongClickListener true

        }
    }

更新:

(1..912).forEach {
        val id = resources.getIdentifier("Price$it", "id", packageName)
        val tv = findViewById<TextView>(id)
        tv.setOnLongClickListener {

            //Alert Window
            val alertDialog = AlertDialog.Builder(this@MainActivity)
            alertDialog.setTitle("NEW PRICE")
            val input = EditText(this@MainActivity)
            //Alert Submit on Enter
            input.setOnKeyListener { v, keyCode, event ->
                if (event.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
                    // Input changes text
                    tv.text = input.text
                    when {
                        tv.text.startsWith("-") -> tv.setTextColor(Color.RED)
                        tv.text.startsWith("+") -> tv.setTextColor(Color.GREEN)
                    else -> {
                        tv.text = "_"
                        tv.setTextColor(Color.DKGRAY)
                    }
                    }
                    // Hide Keyboard
                    // Save Price Table
                }
                false
            }

【问题讨论】:

    标签: input kotlin keyboard enter submit-button


    【解决方案1】:

    您可以为EditText设置自定义OnKeyListener

    val input = EditText(this@MainActivity)
    input.setOnKeyListener(View.OnKeyListener { v, keyCode, event ->
        if (event.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
            // your code here
            true
        }
        false
    })
    

    【讨论】:

    • 非常感谢!现在我只需要找到一个关闭键盘功能来添加它和一个保存状态。
    【解决方案2】:

    你需要为你的EditText设置OnEditorActionListener

    val input = EditText(this@MainActivity)
    input.setOnEditorActionListener { _, actionId, event ->
        // If triggered by an enter key, this is the event; otherwise, this is null.
        // if shift key is down, then we want to insert the '\n' char in the TextView;
        if (event == null || event.isShiftPressed) return@setOnEditorActionListener false
        // TODO: your code goes here
        return@setOnEditorActionListener true
    }
    

    在此示例中,我还检查了是否未按下 shift。它适用于具有任何类型键盘的所有设备。

    注意 1。我们在这里不需要actionId,但您仍然可以为键盘设置不同的操作(使用input.imeOptions = EditorInfo.IME_ACTION_SEND 或使用xml 属性android:imeOptions="actionSend"),并且任何类型的键盘上的任何类型的操作都会调用侦听器。 Read Android documentation 了解有关操作的更多信息。

    注意 2。我为所有这些逻辑制作了自定义包装器,允许我以最简单的方式设置输入键监听器。查看this gist

    editText.setOnEnterActionListener {
        Toast.makeText(context, "Click", Toast.LENGTH_SHORT).show()
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-07
      • 1970-01-01
      • 2016-10-19
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 2018-04-15
      相关资源
      最近更新 更多