2019-10-18
關鍵字:Android 軟鍵盤
Android 在開發 APK 的時候需要用戶輸入文字是很尋常的。
通常我們都會選擇使用 EditText 或自定義一個類似的輸入框來承載用戶的輸入信息。
但正所謂喚出軟鍵盤容易,隱藏它難啊。
你可能會說,隱藏系統輸入法軟鍵盤有什么難的,輸完以后自己點一下軟鍵盤右上角的隱藏按鈕不就完事了。
沒錯,還真是這樣。
但,現實情況卻是,很少有用戶願意去做這個“多余的操作”。
做為軟件開發者,我們時刻要提醒自己“用戶都是懶惰的”,任何多余的動作用戶都會覺得煩。就拿這個隱藏軟鍵盤的功能來說,用戶就是不願意去點那個隱藏按鈕,你也拿他們沒辦法啊。但往往就因為沒有隱藏掉軟鍵盤,我們的程序就可能會有很不好的體驗,更有嚴重的還會引起程序的運行問題。
所以,我們就得加個邏輯去幫助用戶隱藏這個軟鍵盤。
如何觸發隱藏軟鍵盤的邏輯還得各位根據自己的實際需求來設計,我們這里僅來談談如何隱藏它。
如果你去網上搜尋通過代碼隱藏軟鍵盤的方法,那你大概率會得到如下信息:
例如由 https://www.cnblogs.com/bluestorm/p/8967492.html 所述的:
或由 https://www.jianshu.com/p/f32707a47e3e 所述的:
這些方法都是好方法,在大多數情況下都能湊效。
那什么是少數情況下呢?
就比如筆者在 堅果PRO2 上開發一款 APK 時就遇到了這個少數情況。
無論如何也無法通過這些代碼來隱藏掉軟鍵盤,在巨大的項目進度壓力下甚至一度把筆者逼到瀕臨絕望的地步。
可悲的是網上並沒有記載以上這些方法無效的情況的原因與解決辦法。筆者雖然知道這個時候要想糾出原因就只能跟蹤 SDK 源碼了,但在項目進度壓力之下,真的是有心也無力呀。
即使如此,問題還是得解。怎么辦?
既然無法通過正統的方式來隱藏掉它,那就只能另辟蹊徑了。
我們在手動隱藏軟鍵盤的時候通常可以用兩種方式:1、點擊軟鍵盤右上角的隱藏按鈕;2、點擊手機返回鍵。
我們無法通過代碼來實現模擬點擊了軟鍵盤右上角按鈕的功能,但是我們卻可以實現一個模擬返回鍵事件的功能啊。
於是乎,這個問題就這么被解決掉了。
以下是通過代碼發送一個模擬按返回鍵事件的代碼:
new Thread(){ @Override public void run() { Instrumentation instrumentation = new Instrumentation(); instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK); } }.start();
注意:發送模擬按鍵事件的代碼只能在子線程中運行。