Как прослушать ввод ключа от пользователя? - PullRequest
0 голосов
/ 09 января 2019

Мне удалось получить всплывающее диалоговое окно Alert с 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

        }
    }

UPDATE:

(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
            }

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Вам необходимо установить OnEditorActionListener для вашего EditText:

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
}

В этом примере я дополнительно проверяю, что смена не нажата. Он будет работать на всех устройствах с любой клавиатурой.

Примечание 1 . Нам не нужен actionId здесь, но вы все равно можете установить различные действия для клавиатуры (с input.imeOptions = EditorInfo.IME_ACTION_SEND или с атрибутом xml android:imeOptions="actionSend"), и слушатель будет вызван для любого действия на клавиатуре любого типа. Прочитайте документацию Android , чтобы узнать больше о действиях.

Примечание 2 . Я сделал специальную оболочку для всей этой логики, которая позволяет мне установить слушатель ввода ключа наиболее простым способом. Проверьте этот смысл .

editText.setOnEnterActionListener {
    Toast.makeText(context, "Click", Toast.LENGTH_SHORT).show()
}
0 голосов
/ 09 января 2019

Вы можете установить свой пользовательский OnKeyListener для EditText:

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
})
...