android開發中,ListView中輸入框與軟鍵盤的坑
阿新 • • 發佈:2019-01-24
這兩天遇到了一個頭疼的問題,一直沒找到好久辦法,各種百度,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="" />
哈哈哈,這就完美解決了我的問題,希望對遇到過這個問題的朋友們有幫助!