Android隱藏輸入法軟鍵盤的一些說明
在編寫一個仿微信的Android聊天軟件時,我發(fā)現(xiàn)了一個嚴(yán)重的BUG。當(dāng)用戶點擊輸入框用軟鍵盤輸入文本的同時點擊了“返回好友列表”按鈕,返回到好友列表時軟鍵盤無法關(guān)閉。 為了解決這個問題,我上網(wǎng)找了
在編寫一個仿微信的Android聊天軟件時,我發(fā)現(xiàn)了一個嚴(yán)重的BUG。當(dāng)用戶點擊輸入框用軟鍵盤輸入文本的同時點擊了“返回好友列表”按鈕,返回到好友列表時軟鍵盤無法關(guān)閉。
為了解決這個問題,我上網(wǎng)找了一些關(guān)于Android如何隱藏輸入法的方法。普遍的方法如下:
((InputMethodManager)getSystemService(_METHOD_SERVICE)).hideSoftInputFromWindow(().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
然而,當(dāng)我將這段代碼加入到返回按鈕的點擊事件后,發(fā)現(xiàn)當(dāng)用戶點擊了返回按鈕時App異常退出,并沒有報錯。我查詢了一下Android開發(fā)官網(wǎng),發(fā)現(xiàn)實現(xiàn)以上功能的代碼應(yīng)該這樣寫:
((InputMethodManager) getSystemService(_METHOD_SERVICE)).hideSoftInputFromWindow((), InputMethodManager.HIDE_NOT_ALWAYS);
這里的editview是輸入框。之所以用第二段代碼能夠?qū)崿F(xiàn)所需功能,是因為第二段代碼是關(guān)閉指定輸入框的輸入法,而第一段代碼則針對整個Activity。在實際情況下,輸入法是在輸入框獲得焦點時打開的,而不是在Activity全局打開的,所以第一段代碼無法起效,并且會導(dǎo)致異常退出。
當(dāng)然,在某些游戲中可能會用到針對Activity全局打開的輸入法軟鍵盤。因此,在使用關(guān)閉軟鍵盤的代碼時,一定要注意關(guān)閉之前是哪個控件觸發(fā)的軟鍵盤,還是由Activity觸發(fā)的。