我需要在WebView中以编程方式显示/隐藏Android软键盘。用户有一个按钮来显示/隐藏它。我已经阅读了几篇有关如何隐藏它的文章,但没有阅读有关切换功能的文章,因此用户可以按需隐藏或显示它,并且仅使用存在的硬件键盘或设备嵌入式扫描仪读取的条形码。
答案 0 :(得分:0)
好吧,最后没有人回复我,所以我找到了解决方法。这不是最好的可能性,但至少在我看来,这解决了问题。我需要按需禁用/启用键盘(通过Zebra坚固型设备的功能键),让事情变得更加复杂的是,此功能应与WebView一起使用,在WebView中,以编程方式,这并不容易(... all)方式来访问嵌入在其中的任何EditText控件。周围的工作既不是完美的也不是优雅的,但是它对我有用,所以我想与可能面临类似问题的其他人分享。 首先,我们必须检测WebView内部的触摸(在KOTLIN中):
webView.setOnTouchListener(object : View.OnTouchListener {
override fun onTouch(v: View, m: MotionEvent): Boolean {
if (!keybEnabled) {
hideKeyboard()
}
return false
}
})
然后我添加了一个计划任务来隐藏键盘:
private fun hideKeyboard() {
Handler().postDelayed({
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(webView.getWindowToken(), 0)
}, 200)
}
hideKeyboard()方法将强制隐藏键盘,直到用户单击一个按钮将其启用为止(标志keybEnabled == true)。
此解决方案有两个缺点。 1)如果您将延迟降低到接近100毫秒的值,则有可能在Android开始显示该任务之前隐藏了软键盘,因此它将无法正常工作。在本例中200毫秒足以满足我的情况,但这取决于设备的性能。 2)有时软键盘会在屏幕上出现几毫秒,然后消失(仅当用户点击EditText时)。
如果第2点对您来说不是问题,则此解决方案应该可以正常工作。希望对别人有帮助。
更新
我发现了一个稍有不同的解决方案,该解决方案也解决了上述键盘外观。在此链接Handler Solution上。
最终注意事项
我认为Android中的软键盘管理太可怕了,令人难以置信的是,经过这么多年,它仍然基于如此繁琐的逻辑。没有一种功能可以通过编程方式简单地禁用/启用软键盘,并且对于所有当前活动的控件,更糟糕的是,没有任何SDK函数可以返回软键盘状态(显示/隐藏)。我认为这是完全不能接受的,因为我认为Android开发团队不会花更多的2个小时来提供此类有用的功能。