android自動打開和關閉軟鍵盤


在一個項目中我需要一個EditText獲取到焦點,同時自動打開軟鍵盤,需要使用方法:

private InputMethodManager imm;
imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(password_et, InputMethodManager.SHOW_FORCED);

有的打開了但是不按返回鍵不能自動關上,比如使用參數InputMethodManager.SHOW_FORCED,有的干脆打不開,比如使用參數InputMethodManager.SHOW_IMPLICIT,就不會自動彈出鍵盤


為了解決不能自動隱藏軟鍵盤的問題,我找了很多資料,最后發現,如果成對使用:

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

就可以代碼實現隱藏軟鍵盤。



也就是說:我在需要打開軟鍵盤時用:

private InputMethodManager imm;
 imm = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(password_et, InputMethodManager.RESULT_SHOWN);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

在關閉軟鍵盤時,我需要再次調用

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

這樣軟鍵盤就隱藏了。


然后我的項目中讓用戶輸入密碼,當密碼錯誤的時候會用Toast來提示用戶,然后把EditText內容清空,當顯示Toast的時候軟鍵盤會自動關上,因為清空內容后用戶還要輸入,所以我需要再次打開軟鍵盤。


這時我又調用了一次

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
發現軟鍵盤並不能按照想象的打開。

考慮到隱藏軟鍵盤也用這個方法,是不是Toast后調用的這一次是隱藏軟鍵盤呢?雖然Toast讓軟鍵盤強制隱藏了,但是代碼里面並沒有跟打開軟鍵盤時調用的這個方法成對的隱藏方法,所以這一次的調用是為了隱藏。


於是我把這個方法復制了一行,即隱藏時調用兩次這個方法:

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

發現軟鍵盤被打開了。證明我想的是對的, 由於其他原因(只要不是代碼原因)隱藏的軟鍵盤,再次打開時必須調用兩次該方法:

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);







注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: