Android判斷軟鍵盤彈出并隱藏的簡單完美解決方法(推薦)
最近項目中有一個編輯框,下面是個ListView。在觸發(fā)編輯框彈出軟鍵盤后,ListView還能滑動,并且ListView的item還能響應(yīng)單擊。這樣的體驗效果很不好。于是便想在滑動或單擊item時判斷鍵盤是否彈出,若彈出,則把它隱藏。
網(wǎng)上一搜,發(fā)現(xiàn)Android并沒有直接提供軟鍵盤的彈出與隱藏判斷,一些解決方案諸如判斷父控件的高度或者判斷
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) 隱藏鍵盤;
的方法并沒有用,于是便從官方文檔著手。
發(fā)現(xiàn)InputMethodManager有一個方法isActive(View view):如果view是輸入法的活動view,則返回true。也就是說,如果是由view觸發(fā)彈出軟鍵盤,則返回true。哇,那問題就好辦了
if(isActive(edittext)) 隱藏鍵盤
接著讓另一個view強制獲取焦點,這樣isActivite(ediitext)就為false.
這個方法比較簡單,代碼比較短,也很好理解,希望能夠幫助有需要的人,也不枉費我調(diào)試幾個小時的功夫。
附上代碼:
InputMethodManager inputMethodManager = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);<br>private boolean hideKeyboard(){ if(inputMethodManager.isActive(searchEditText)){<br> //因為是在fragment下,所以用了getView()獲取view,也可以用findViewById()來獲取父控件 getView().requestFocus();//使其它view獲取焦點.這里因為是在fragment下,所以便用了getView(),可以指定任意其它view inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); return true; } return false; }
ps: 如果是手動彈出鍵盤,getActivity().getCurrentFocus()改成searchEditText.并且手動彈出的鍵盤isActivie()失效,可用標(biāo)記來判斷.
以上就是小編為大家?guī)淼腁ndroid判斷軟鍵盤彈出并隱藏的簡單完美解決方法(推薦)全部內(nèi)容了,希望大家多多支持腳本之家~
相關(guān)文章
flutter RotationTransition實現(xiàn)旋轉(zhuǎn)動畫
這篇文章主要為大家詳細(xì)介紹了flutter RotationTransition實現(xiàn)旋轉(zhuǎn)動畫,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07Android Studio做超好玩的拼圖游戲 附送詳細(xì)注釋源碼
這篇文章主要介紹了用Android Studio做的一個超好玩的拼圖游戲,你是0基礎(chǔ)Android小白也能包你學(xué)會,另外附送超詳細(xì)注釋的源碼,建議收藏!2021-08-08Android面向切面基于AOP實現(xiàn)登錄攔截的場景示例
這篇文章主要為大家介紹了Android面向切面基于AOP實現(xiàn)登錄攔截的場景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08