android - 返回同一活动时无法显示键盘 - 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() }
}
这是我尝试过的:
在 XML 中设置 focusable/focusableInTouchMode
onResume
在方法中设置focusable/focusableInTouchMode//在
PinEntryEditText
containing里面创建了一个函数,并在方法中调用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
我将这一行添加到我的活动中:
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 线程上调用。
推荐阅读
- angular - 覆盖父组件
- c# - 如何解释“检测到降级...”NuGet 错误消息?
- amazon-web-services - (使用 aws-sdk)如何查找存储在 amazon s3 中的文件夹的总大小
- r - 使用 glm 拟合逻辑回归的默认起始值
- eclipse - 在 Eclipse 2019-09+ 中编辑文件时出现水平灰色/灰色条的问题
- node.js - NodeJS 的 JWT 无效签名问题
- css - 在 Vuetify v-data-table 中添加行间距
- javascript - classList.Add 的 js 优化
- mongodb - 如何在mongo的字符串数组中应用基于正则表达式的替换?
- compiler-construction - 溢出符号不会提高可着色性