Monday, May 10, 2010

為什麼 Android 的實體鍵盤沒有 auto correct 功能

Android 的 Virtual Keyboard 有一個 auto correct 的功能相信大家都知道,例如當我想輸入 "android" 卻打成了 "ancroud",Candidate List 上會自動出現 ”android” 的選項,另外由於 "ancroud" 不是一個字,因此 Keyboard 會自動為你選擇 "android" 為預設的選擇,當你按 space 就會自動選擇了 "android" 而不是 "ancroud"。

這個功能其實是根據使用者手指按到 Virtual Keyboard 上哪一點(螢幕上的 x,y 座標),實時計算出來的。例如我按到 S 鍵的右上角,那麼 Virtual Keyboard 記錄的實際上可能是 S,D,W,E 四個鍵,按可能性排列。用上面的例子來說明,輸入 "ancroud",實際上 Keyboard 記錄的鍵可能分別是:

(aqw)(njmb)(cdxf)(rtf)(okl)(uij)(dsef)

Virtual Keyboard 根據字典,把上面的一串字母所有可能組成的字給找出來,就得到 "android" 這個字了。

好了,那麼為什麼實體鍵盤做不到這個效果呢,原因是實體鍵盤每個按鍵只是對應一個 key code 而不是一個座標,例如你按 S 鍵,系統就只會得到 S 一個 key code,系統本身並不可能知道附近還有Q,W,A,E,D,Z,X等等的按鍵。而不同的 Android 手機的實體鍵盤的位置各有不同,因此也不可能預設 Q 鍵就一定是在 S 附近。例如下面兩種實體鍵盤:

對 Milestone 來說 D 鍵附近是 W,E,R,S,F,Z,X,C
對 G1 來說 D 鍵附近是 E,R,S,F,X,C

如果要為實體鍵盤加上 auto correction 不是不可能,只是
1. 每種不同的手機可能要分別自行設定各個按鍵附近的鍵
2. auto correction 的效果可能沒有 Virtual Keyboard 那麼好

因此 Android 內建的 Keyboard 選擇了放棄實體鍵盤的 auto correction。

No comments: