1. 程式人生 > >android開發中,ListView中輸入框與軟鍵盤的坑

android開發中,ListView中輸入框與軟鍵盤的坑

這兩天遇到了一個頭疼的問題,一直沒找到好久辦法,各種百度,google,看了很多大牛們的帖子後,才找到了一點思路,下面我就把解決辦法給大家分享一下。
主要的問題是:ListView中edittext,輸入資料的時候,軟鍵盤彈出,但是輸入完成後,如果不大軟鍵盤縮回去,輸入的資料是無效的,獲取資料的時候是空。這就蛋疼了...
好在有這個一個東西:

InputMethodManager imm = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

本以為可以解決了問題,但是發現我的程式是開啟新的執行緒來完成操作的,所以還沒來的急關閉輸入法呢,啟動了執行緒,pass...

那怎麼辦呢

private void listenerSoftInput() {
        final View activityRootView = findViewById(R.id.baojia);
        activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                int heightDiff = activityRootView.getRootView()
                        .getHeight() - activityRootView.getHeight();
                if (heightDiff > 100) { // 如果高度差超過100畫素,就很有可能是有軟鍵盤...
                    Log.e("軟鍵盤彈出了", "軟鍵盤彈出");
                    confim.setVisibility(View.GONE);
                } else if (heightDiff < 100) {
                    Log.e("軟鍵盤彈出了", "軟鍵盤沒有彈出");
                    confim.setVisibility(View.VISIBLE);
                    //new Thread(Confim).start();
                }
            }
        });
    }
同過了些這個一個方法,來判斷是否彈出了軟鍵盤,是則怎麼操作,否則怎麼操作。。。

上圖程式碼中,confim是我的一個按鈕控制元件,

final View activityRootView = findViewById(R.id.baojia);是你的佈局檔案的id,
<img src="https://img-blog.csdn.net/20160707100205917?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

哈哈哈,這就完美解決了我的問題,希望對遇到過這個問題的朋友們有幫助!