Android-以编程方式在WebView中显示/隐藏软键盘

时间:2019-10-25 12:37:26

标签: android kotlin webview

我需要在WebView中以编程方式显示/隐藏Android软键盘。用户有一个按钮来显示/隐藏它。我已经阅读了几篇有关如何隐藏它的文章,但没有阅读有关切换功能的文章,因此用户可以按需隐藏或显示它,并且仅使用存在的硬件键盘或设备嵌入式扫描仪读取的条形码。

1 个答案:

答案 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个小时来提供此类有用的功能。