Android鍵盤自動隱藏並轉移焦點

來源:互聯網
上載者:User

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); 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.