簡體   English   中英

Android - 以編程方式顯示/隱藏 WebView 中的軟鍵盤

[英]Android - show/hide soft keyboard in WebView programmatically

我需要在 WebView 中以編程方式顯示/隱藏 Android 軟鍵盤。 用戶有一個按鈕來顯示/隱藏它。 我已經閱讀了幾篇關於如何隱藏它的文章,但沒有一篇關於切換功能的文章,以便用戶可以按需隱藏或顯示它,並且僅使用存在的硬件鍵盤或我設備的嵌入式掃描儀讀取的條形碼。

好的,最后沒有人回復我,所以我找到了解決方法。 這不是最好的可能,但至少在我的情況下解決了這個問題。 我需要按需禁用/啟用鍵盤(通過 Zebra 堅固設備上的 function 鍵),讓事情變得更復雜的是,這個功能應該與 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里面的軟鍵盤管理太恐怖了,想不到這么多年還是基於這么繁瑣的邏輯。 There isn't a function to simply disable/enable the soft keyboard programmatically and for all the current activity's controls, it's even worse that there isn't any SDK function that returns the soft keyboard status (displayed/hidden). 我認為這根本無法接受,因為我不認為 Android 開發團隊會花費更多的 2 個小時來提供這些有用的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM