editText находится в фокусе, но виртуальная клавиатура не открывается автоматически с помощью SHOW_IMPLICIT в AlertBuilder - PullRequest
0 голосов
/ 09 февраля 2019

Когда я использую SHOW_FORCED, клавиатура открыта, но когда я закрываю alertDialog, клавиатура меняется на текстовую раскладку и не скрывается, клавиатура закрывается только при нажатии кнопки «Назад» на Android, имитация кнопки «Назад» в коде неработа.

При использовании SHOW_IMPLICIT не открывать клавиатуру автоматически.

*** Код с комментариями работает, но ...

private fun insertItemQuantity(orderDetail: OrderDetail) {
    val modal = alert {
        customView {
            verticalLayout {
                title = getString(R.string.insert_quantity)
                val quantity = editText {
                    keyListener = DigitsKeyListener.getInstance("0123456789")
                    inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL or
                            InputType.TYPE_NUMBER_FLAG_SIGNED
                    showSoftInputOnFocus = true
                    isFocusable = true
                    isFocusableInTouchMode = true
                }
                positiveButton(getString(R.string.confirm)) {
                    val c = quantity.text.toString()
                    if (c.isBlank() )
                        toastCustomWarning(getString(R.string.field_cannot_be_empty))
                    else {
                        if (c.toDouble() > 0) {
                            RealmRepository.getRealm().beginTransaction()
                            orderDetail.quantity = c.toDouble()
                            orderDetail.uuid = UUID.randomUUID().toString()
                            RealmRepository.getRealm().commitTransaction()
                            orderItemActivityViewModel.addOrderItem(orderDetail)
                        } else {
                            toastCustomWarning(getString(R.string.field_cannot_be_empty_or_zero))
                        }
                    }
                }
                negativeButton(getString(R.string.cancel)) {
                    quantity.clearFocus()
                }
                neutralPressed("Neutral"){

                }
            }
        }
    }

    //quantity.requestFocus()
    /*val inputManager: InputMethodManager =
            getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    inputManager.toggleSoftInput(
            InputMethodManager.SHOW_FORCED,
            InputMethodManager.HIDE_IMPLICIT_ONLY
    )*/
    var inputMethodManager: InputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.showSoftInput(quantity, InputMethodManager.SHOW_IMPLICIT)
    //inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY)
    modal.iconResource = R.drawable.ic_logo
    modal.show()
}

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Очень хорошо, отлично работает, клавиатура закрывается.

private fun insertItemQuantity(orderDetail: OrderDetail) {
    val modal = alert {
        customView {
            verticalLayout {
                title = getString(R.string.insert_quantity)
                val quantity = editText {
                    keyListener = DigitsKeyListener.getInstance("0123456789")
                    inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL or
                            InputType.TYPE_NUMBER_FLAG_SIGNED
                    showSoftInputOnFocus = true
                    isFocusable = true
                    isFocusableInTouchMode = true
                }
                positiveButton(getString(R.string.confirm)) {
                    val c = quantity.text.toString()
                    if (c.isBlank() )
                        toastCustomWarning(getString(R.string.field_cannot_be_empty))
                    else {
                        if (c.toDouble() > 0) {
                            RealmRepository.getRealm().beginTransaction()
                            orderDetail.quantity = c.toDouble()
                            orderDetail.uuid = UUID.randomUUID().toString()
                            RealmRepository.getRealm().commitTransaction()
                            orderItemActivityViewModel.addOrderItem(orderDetail)
                        } else {
                            toastCustomWarning(getString(R.string.field_cannot_be_empty_or_zero))
                        }
                    }
                }
                negativeButton(getString(R.string.cancel)) {
                    val inputManager: InputMethodManager =
                            getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
                    inputManager.hideSoftInputFromWindow(quantity.windowToken, 0)
                }
                neutralPressed("Neutral"){

                }
            }
        }
    }

    //quantity.requestFocus()
    val inputManager: InputMethodManager =
            getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    inputManager.toggleSoftInput(
            InputMethodManager.SHOW_FORCED,
            InputMethodManager.HIDE_IMPLICIT_ONLY
    )
    /*var inputMethodManager: InputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.showSoftInput(quantity, InputMethodManager.SHOW_IMPLICIT)*/
    //inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY)
    modal.iconResource = R.drawable.ic_logo
    modal.show()
}
0 голосов
/ 10 февраля 2019

Я не уверен, как открыть клавиатуру, но вы можете использовать этот подход, чтобы скрыть клавиатуру.Я хорошо работаю для меня.

(getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager)
        ?.hideSoftInputFromWindow(findViewById<View>(android.R.id.content)?.windowToken, 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...