Android判斷鍵盤彈出狀態(tài)并隱藏

最近遇到一個(gè)問題,就是無法監(jiān)控Android輸入法是否彈出,網(wǎng)上找了好多辦法,有監(jiān)聽global layout大小變化的,代碼如下

    private void addKeybordListener() {
        // 監(jiān)聽global layout的大小變化
        final View activityRootView = findViewById(R.id.root);    //此處是你頁(yè)面根布局
        activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
                if (heightDiff > 100) { // 高度變小100像素則認(rèn)為鍵盤彈出
                    // 這里執(zhí)行需要的處理

                } 
            }
        });

但是這種監(jiān)聽的弊端就是只能進(jìn)來頁(yè)面監(jiān)聽一次,無法根據(jù)點(diǎn)擊一個(gè)按鈕時(shí)判斷出鍵盤是否彈出,后來我想通過一個(gè)布爾的變量,keyboardShow判斷鍵盤現(xiàn)在是否顯示,但是這樣控制邏輯很麻煩,也容易出錯(cuò),后來找到一個(gè)簡(jiǎn)單方式,就是獲取InputMethodManager,根據(jù)它的isActive判斷鍵盤是否顯示,代碼如下:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm.isActive()) {   //如果為true,則是鍵盤正在顯示
            HideKeyboard(mEtOrg); //隱藏鍵盤
        }

隱藏鍵盤代碼如下

// 隱藏虛擬鍵盤
    public static void HideKeyboard(View v) {
        InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm.isActive()) {
            imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);

        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容