返回相同 activity 时无法显示键盘 - PinEntryEditText
Unable to show keyboard when returning to the same activity - PinEntryEditText
我按照此示例 (https://medium.com/@ali.muzaffar/building-a-pinentryedittext-in-android-5f2eddcae5d3) 在我的应用程序中创建了一个 PinEntryEditText。我想要的是每次打开包含 PinEntryEditText 的 activity 时显示键盘。我通过在 onResume
方法中请求焦点来做到这一点。
问题是当打开一个新的activity和返回回到activity 包含 PinEntryEditText。
这可能是什么问题?
override fun onResume() {
super.onResume()
pinEntry_editText.post { pinEntry_editText.requestFocus() }
}
这是我试过的:
在XML
中设置focusable/focusableInTouchMode
在onResume
方法中设置focusable/focusableInTouchMode
在 PinEntryEditText
中创建了一个包含 requestFocus
/focusable
/focusableInTouchMode
的函数,并在 onResume
方法中调用了它
在onResume
方法中调用此函数:
fun AppCompatEditText.requestKeyboardFocus() {
val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}
在 AndroidManifest
中,我将此行添加到我的 activity:
android:windowSoftInputMode="adjustResize" />
我建议监听当前焦点变化并强制显示键盘。
先补充一个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 话题上。
我按照此示例 (https://medium.com/@ali.muzaffar/building-a-pinentryedittext-in-android-5f2eddcae5d3) 在我的应用程序中创建了一个 PinEntryEditText。我想要的是每次打开包含 PinEntryEditText 的 activity 时显示键盘。我通过在 onResume
方法中请求焦点来做到这一点。
问题是当打开一个新的activity和返回回到activity 包含 PinEntryEditText。
这可能是什么问题?
override fun onResume() {
super.onResume()
pinEntry_editText.post { pinEntry_editText.requestFocus() }
}
这是我试过的:
在XML
中设置focusable/focusableInTouchMode在
onResume
方法中设置focusable/focusableInTouchMode在
PinEntryEditText
中创建了一个包含requestFocus
/focusable
/focusableInTouchMode
的函数,并在onResume
方法中调用了它在
onResume
方法中调用此函数:fun AppCompatEditText.requestKeyboardFocus() { val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}
在 AndroidManifest
中,我将此行添加到我的 activity:
android:windowSoftInputMode="adjustResize" />
我建议监听当前焦点变化并强制显示键盘。 先补充一个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 话题上。