在TV上的軟鍵盤不需要再在TV上touch軟鍵盤按鈕,需要通過遙控器進行操作,因此需要在軟鍵盤上知道目前是在哪個鍵子上,這需要通過焦點來實現。
LatinIMEIME改寫功能代碼:
添加功能:為IME軟鍵盤鍵子添加焦點(邊框),並支援鍵盤上的方向鍵,在按上下左右方向鍵時,焦點跟著方向鍵移動;並支援鍵盤迴車按鈕,在按下斷行符號鍵後,將軟鍵盤對應鍵子內容輸入到editor(編輯框);
代碼修改描述:
要攔截鍵盤的按鈕事件,需要在代碼中重寫onKeyDown(int keyCode, KeyEvent event)方法,參數keyCode可以是鍵盤上按鍵對應的KeyEevent中的值。要使有效IME攔截鍵盤上按鍵事件,需要在特定類中重寫onKeyDown(int keyCode, KeyEvent event)方法。一開始我重寫的是LatinKeyboardView中的onKeyDown(int keyCode, KeyEvent event)方法,但在運行後,沒有攔截到鍵盤上的方向鍵按鈕的down事件,後經過查詢相關的知識點,知道了IME的執行入口是InputMethodService類及其子類,在其中有建立IME軟鍵盤的一系列回調方法,用以建立輸入視圖,候選區視圖等。要攔截鍵盤的按鈕事件,也需要在InputMethodService子類中重寫onKeyDown(int keyCode, KeyEvent event)方法,然後運行到模擬器上,你在按下鍵盤上的方向鍵時,IME就可以有效攔截你的鍵盤按鈕事件,我在LatinIME中的onKeyDown(int keyCode, KeyEvent event)方法中的添加方向鍵按鈕事件,通過修飾鍵子在鍵盤上的x,y來控制焦點的移動;
焦點的移動:
在軟體盤上畫焦點,並跟隨鍵盤方向鍵進行移動。
首先要做的是在適當的類中,畫出焦點,實際上的焦點是通過在鍵子邊上畫邊框來實現,android中可以通過重寫onDraw(Canvas canvas)方法來實現;要在軟鍵盤的輸入視圖上的鍵子上畫邊框,就不是在LatinIME這個InputMethodService子類中重寫onDraw(Canvas canvas)方法了,而應該是在建立輸入視圖的類中進行重寫onDraw(Canvas canvas)方法,及在LatinKeyboardView類(KeyboardView的子類)中重寫onDraw(Canvas canvas)。