首页 > 解决方案 > 返回同一活动时无法显示键盘 - PinEntryEditText

问题描述

我按照这个例子(https://medium.com/@ali.muzaffar/building-a-pinentryedittext-in-android-5f2eddcae5d3)在我的应用程序中创建了一个 PinEntryEditText。我想要的是每次打开包含 PinEntryEditText 的活动时都显示键盘。我通过在onResume方法中请求焦点来做到这一点。

问题是当打开一个新活动并返回到包含 PinEntryEditText 的活动时,键盘没有出现。

这里可能是什么问题?

    override fun onResume() {
    super.onResume()
    pinEntry_editText.post { pinEntry_editText.requestFocus() }
}

这是我尝试过的:

AndroidManifest我将这一行添加到我的活动中:

android:windowSoftInputMode="adjustResize" />

标签: androidandroid-edittextfocus

解决方案


我会建议聆听当前焦点的变化并强制显示键盘。首先添加一个showSoftKeyboard的乐趣:

private fun showSoftKeyboard(view: View) {
    if (view.requestFocus()) {
        val imm = view.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager?
        
        // here is one more tricky issue
        // imm.showSoftInputMethod doesn't work well
        // and imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0) doesn't work well for all cases too
        imm?.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)
    }
}

更新你的 onResume 乐趣:

override fun onResume() {
    super.onResume()
    currentFocus?.let {
        showSoftKeyboard(it)
    }
    pinEntry_editText.requestFocus()
}

**

pinEntry_editText.post { // Do work on UI Thread }

当我们不在 UI 线程上并且我们想要切换回以进行一些 UI 更改时,这很有用,因此在这种情况下不需要这样做,因为 onResume 将在 UI 线程上调用。


推荐阅读