2011-07-13 17 views
3

我寫了一個IME,它顯示一些彈出窗口,並在用戶單擊Back時關閉它們。它的工作時間爲99%,但某些應用程序(如瀏覽器)能夠在IME之前攔截KeyEvent.KEYCODE_BACK,使我的彈出窗口保持打開狀態。瀏覽器(以及其他一些應用程序)如何在IME之前攔截Back鍵?

根據文檔InputMethodService應該在Activity之前接收關鍵事件。我用一個Activity測試了它,它按預期工作。

我檢查瀏覽器的源代碼,它只是簡單地重寫Activity.onKeyDown()onKeyUp(),後InputMethodService.onKeyDown()onKeyUp()應該接收事件

爲什麼瀏覽器似乎以錯誤的順序接收關鍵事件?請幫忙,因爲我不想爲所有彈出窗口添加醜陋的關閉按鈕!

由於提前,

巴里

+0

你在看什麼瀏覽器?股票AOSP瀏覽器或其他?在一般情況下,有一個'onKeyPreIme'方法可以在IME執行之前接收事件,例如後退鍵。 – adamp

+0

股票瀏覽器和Google搜索。我已經檢查過瀏覽器源代碼(com.android.browser),onKeyPreIme()沒有在任何地方定義過。 :( –

回答

1

Activity.onBackPressed()。當您覆蓋此按鈕的功能時要小心,因爲如果您正在做一些意想不到的事情或完全忽略後退按鈕,它可能會造成非常負面的用戶體驗。

如果您使用AlertDialogs或類似的彈出窗口,您可能不需要覆蓋功能,只需setCancelable(true)。觸摸屏幕和後退按鈕將關閉對話框。

+1

他正在討論輸入法 –

+0

感謝您的回答丹但事實並非如此Guillaume指出我已經寫了一個IME而不是一個Activity一小部分應用程序(如Browser)正在攔截後面的鍵另外,com.android.browser.BrowserActivity沒有實現onBackPressed(),所以不能這樣做,另外我用Activity和InputMethodService.onKeyDown()測試了你的答案,之前調用了它。 Activity.onBackPressed(),如預期的那樣。爲什麼瀏覽器與大多數其他應用程序不同? –

相關問題