1. 在Android開發中,今天遇到一個需求,如果正在輸入文本時,又點擊了某個控制項,此時自動隱藏鍵盤操作,並且該控制項的點擊事件將不執行,
鍵盤隱藏後的下一次點擊方可觸發點擊事件。在網上找過很多,但後測試都失敗了。
以下是個人試過後的結果,代碼如下:
說明:otherView是一個其它的組件,可以是任何的控制項,作用只是把焦點從輸入框轉移走; input_edit就是一個TextEdit,當正在輸入時,
點擊鍵盤外的其它事件如:onClick時,則自動隱藏鍵盤。
public boolean checkKeyboardShowing(){otherView.requestFocus();InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);boolean active = imm.isActive(input_edit);imm.hideSoftInputFromWindow(input_edit.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);input_edit.clearFocus();return active;}
解析:
在調用otherView.requestFouces()時,先把焦點轉移到其它任意的控制項上,極其重要。
imm.isActive(input_edit);返回鍵盤是否開啟,註:如果沒有上一步轉移焦點,這裡將永遠為true(也就是說即使關閉了鍵盤也為true)。
imm.hideSoftInputFromWindow(... , ...);關閉鍵盤
input_edit.clearFocus(),當然是清除焦點了
在事件中判斷鍵盤是否顯示狀態,事件將是否執行:
public void onClick(View v) {boolean isShowKeyBoard = g_context.checkKeyboardShowing();if(isShowKeyBoard) return;if (v.getId() == R.id.btn) {//......}}
2. 另外,通過觸發事件給某個TextEdit設定焦點並彈起鍵盤如下:
input_edit.requestFocus();InputMethodManager imm = (InputMethodManager) input_edit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);