When I implemented the drag-spacebar-to-change-language function in CedIME, It seems to work fine on my Nexus One. However testing it on HTC Magic with Android 1.5 reveals a problem - the spacebar drag image won't redraw itself when the spacebar is being dragged.
Since the code in CedIME for the two versions of Android are completely the same, it must be the problem within the Android framework code itself. After two days of tracing / debugging the issue, I found that the problem seems to resides in the TextView class's invalidateDrawable() method. In Android 2.2 this method is reimplemented differently and hence CedIME works fine on Nexus One.
The fix for this come as a sort of a hack. I have to resolve this using Java's reflection mechanism to access some private fields in the Android Framework. Not a very good solution as it may break on future Android versions. But, as long as it works...
Showing posts with label android. Show all posts
Showing posts with label android. Show all posts
Sunday, August 01, 2010
Wednesday, July 28, 2010
Supporting Multiple Android Version
Previously when considering new features for CedIME, I always hesitate about features that require a newer Android version like Voice Input. I want to support devices back to Android 1.5. And I thought it was tedious to manually support multiple code base for different versions of Android.
Now the smart people at Google has shown us the way! Using a method developed by Bill Pugh that was originally developed for implementing a lazy Singleton pattern in Java. It can be modified slightly to accomplish the magic of selecting the right class to load for different runtime versions of Android.
This is much better than using reflection which is slow and ugly.
Using this method I've already made CedIME support multitouch as the Froyo keyboard on Android version 2.0 or above, which is coming in CedIME 1.2.0 together with some other Froyo keyboard features. Stay tuned.
Using this method I've already made CedIME support multitouch as the Froyo keyboard on Android version 2.0 or above, which is coming in CedIME 1.2.0 together with some other Froyo keyboard features. Stay tuned.
Thursday, July 15, 2010
Froyo Keyboard 研究
Froyo 的 source code 早些時候已經 release 了。但是我這兩天才找到時間仔細去看看它有什麼新功能。這裡簡單整理一下,大家將來或者有可能在 CedIME 裡看到類似的功能。
可見的新功能有
Extended keypad for numeric+symbols keys
按著鍵盤任何位置然後向上掃,會顯示兩行新的鍵,有數字鍵及一些常用符號。
Drag on spacebar to switch language
如果在設定裡選擇了多種語言,則按著鍵盤 spacebar 然後左右掃可以轉換輸入語言。
隱藏的新功能
Multi-touch support
當用雙手打字的時候,有可能會發生手指在上一個按鍵還沒離開鍵盤的時候另一隻手指就已經按到下個鍵的情況,這種情況正常來說只能記錄到後來的按鍵。但 Froyo 的鍵盤專門對此做了處理,兩個按鍵都能夠成功輸入。
Larger hit area for next probable key
根據字典,Froyo 鍵盤會計算出下一個將會被輸入字母的機會率,然後暗地裡增加那個字母鍵的大小。例如我剛打: appl 。則下一個字母 e 的機會率會比 r 為高,如果你按到 r 鍵偏左的話就會輸出 e 而不是 r 。
可見的新功能有
Extended keypad for numeric+symbols keys
按著鍵盤任何位置然後向上掃,會顯示兩行新的鍵,有數字鍵及一些常用符號。
Drag on spacebar to switch language
如果在設定裡選擇了多種語言,則按著鍵盤 spacebar 然後左右掃可以轉換輸入語言。
隱藏的新功能
Multi-touch support
當用雙手打字的時候,有可能會發生手指在上一個按鍵還沒離開鍵盤的時候另一隻手指就已經按到下個鍵的情況,這種情況正常來說只能記錄到後來的按鍵。但 Froyo 的鍵盤專門對此做了處理,兩個按鍵都能夠成功輸入。
Larger hit area for next probable key
根據字典,Froyo 鍵盤會計算出下一個將會被輸入字母的機會率,然後暗地裡增加那個字母鍵的大小。例如我剛打: appl 。則下一個字母 e 的機會率會比 r 為高,如果你按到 r 鍵偏左的話就會輸出 e 而不是 r 。
Wednesday, May 12, 2010
沒電
今天 Nexus One 出了問題,早上明明還是電量 100%,到了下午三點居然完全無電然後自動關機了 -_-
中途看了一下 Battery Information 居然發現 Android System 佔用了 60% 以上的電量,正常來說 Display, Idle, Cell Standby 應該是耗電量最多的 process,上網一查果然找到了這個問題:
http://www.google.com/support/forum/p/android/thread?tid=1d4f2b411352797f&hl=en
http://www.google.com/support/forum/p/android/thread?tid=7ba211f7dbd2f012&hl=en
貎似 restart 一下就可以了,希望行得通。
本來想今晚 update CedIME 的,只好明天再算了。(其實明明就是懶 XD)
中途看了一下 Battery Information 居然發現 Android System 佔用了 60% 以上的電量,正常來說 Display, Idle, Cell Standby 應該是耗電量最多的 process,上網一查果然找到了這個問題:
http://www.google.com/support/forum/p/android/thread?tid=1d4f2b411352797f&hl=en
http://www.google.com/support/forum/p/android/thread?tid=7ba211f7dbd2f012&hl=en
貎似 restart 一下就可以了,希望行得通。
本來想今晚 update CedIME 的,只好明天再算了。(其實明明就是懶 XD)
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。
這個功能其實是根據使用者手指按到 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 附近。例如下面兩種實體鍵盤:
對 G1 來說 D 鍵附近是 E,R,S,F,X,C
如果要為實體鍵盤加上 auto correction 不是不可能,只是
1. 每種不同的手機可能要分別自行設定各個按鍵附近的鍵
2. auto correction 的效果可能沒有 Virtual Keyboard 那麼好
因此 Android 內建的 Keyboard 選擇了放棄實體鍵盤的 auto correction。
Monday, May 03, 2010
看得到但是摸不到的 Flash
喬教主解釋不讓 Flash 進駐 iPhone, iPod, iPad 的原因。
當中除了 open 一項之外(由蘋果口中說出 Adobe 不夠 open 實在沒有什麼說服力) 其他的原因我基本上同意,尤其是這點:
"Flash was designed for PCs using mice, not for touch screens using fingers. For example, many Flash websites rely on “rollovers”, which pop up menus or other elements when the mouse arrow hovers over a specific spot"
另一位資深 Flash developer Morgan Adams 也曾經詳細地解釋這個問題:這些以 Touch 為本的行動裝置,即使可以裝上一個完整的 Flash runtime,也只能夠做到顯示網站上的 Flash 內容,而利用鼠標座標的所有動作都不可能做到(例如用鼠標座標控制的賽車遊戲,或者當鼠標經過 menu 而彈出來的 sub-menu 等等),結果網站還是要重新設計,那不如還是用開放的 HTML Standard 更好。
說回 Android,據說 Android 2.2 Froyo 同時會加入 Flash 10.1 的支援。我比較好奇這個問題將會如何解決?還是不解決,讓使用者只能看到 Flash 但又摸不到?
當中除了 open 一項之外(由蘋果口中說出 Adobe 不夠 open 實在沒有什麼說服力) 其他的原因我基本上同意,尤其是這點:
"Flash was designed for PCs using mice, not for touch screens using fingers. For example, many Flash websites rely on “rollovers”, which pop up menus or other elements when the mouse arrow hovers over a specific spot"
另一位資深 Flash developer Morgan Adams 也曾經詳細地解釋這個問題:這些以 Touch 為本的行動裝置,即使可以裝上一個完整的 Flash runtime,也只能夠做到顯示網站上的 Flash 內容,而利用鼠標座標的所有動作都不可能做到(例如用鼠標座標控制的賽車遊戲,或者當鼠標經過 menu 而彈出來的 sub-menu 等等),結果網站還是要重新設計,那不如還是用開放的 HTML Standard 更好。
說回 Android,據說 Android 2.2 Froyo 同時會加入 Flash 10.1 的支援。我比較好奇這個問題將會如何解決?還是不解決,讓使用者只能看到 Flash 但又摸不到?
Sunday, May 02, 2010
Android 2.2 Froyo JIT Compiler
Sunday, April 11, 2010
CedIME 基本功能一覽
English auto-correction: 這個功能實在是非常重要。簡單來說,即使你的字母全打錯了,只要大約按到目標字母附近,也應該能夠成功打出你想打的字, 例:
當然,一些常用而中間有 ' 號的字也不用自己打:
遇到字典裡沒有的字怎辦?不用怕,可以把新字存下來 ,只要長按 Candidate List 裡第一個字就可以了。
新字會被存入 Android 的 User Dictionary 裡,下次再輸入時就會出現在 Candidate List,想刪除新字也很簡單,只要到 Settings -> Language & Keyboard -> User Dictionary 裡把字刪除就可以了。
句尾連續按兩下 space 會自動填上 fullstop
中文方面,現支援倉頡,速成,筆劃和注音,而且不用打完所有字根就可以從 Candidate List 裡選字:
也有聯想字功能:
如果聯想字庫裡沒有的字呢?這裡有一個和 HTC Keyboard 類似的功能,就是會存下所有你輸入過的兩字詞,例如我輸入一次:”世界正美麗”,則”世界”,”界正”,”正美”,”美麗”都會被存下來,然後所有這些詞都會被放到聯想字 Candidate List 裡,你下次再輸入同樣的句子就可以快很多:
從 v1.0.5 開始,中文詞也會被永久存下來。
當然還有其他基本功能包括符號 Keyboard,電話 Keyboard,Landscape Mode Keyboard等等:
還有一些其他的小技巧:
長按句號會彈出一個小鍵盤輸入標點符號。(英中都有)
長按左下角的小鍵盤會進入設定畫面。
按兩下shift鍵或長按shift鍵等於 Caplocks。
基本上我記得的就是這些了,希望能夠幫到大家更方便地使用 Android,同時歡迎大家提出意見 =)
Update 29/4: 新增實體鍵盤支授(倉頡,速成)按 Alt+Space 切換中英模式
計劃中的其他功能:
Saturday, April 10, 2010
CedIME 1.0 發佈到 Android Market
終於將過去一個月的努力成果發佈上 Android Market。
其實本來一直用開 HTC Magic,也有寫其他的app,但是沒有想過寫中文 Keyboard,因為老實說 HTC做的 Keyboard 真的很不錯,要比 android 本身的好。直到一個月前轉用了 Nexus One,找來找去都找不到合心意的中文 Keyboard,總是不及 HTC 的好用,於是把心一橫,用了一個月時間自己寫了一個出來了。雖然還不算完美,但至少HTC Keyboard上我覺得不錯的功能都有了,例如英文的 auto correction, auto completion,以及儲存用戶定義的字。中文方面我個人主要用倉頡或筆劃,所以先把這兩個輸入法加進去(將來還會加其他的,如果有人需要的話),同時也有聯想字和儲存中文詞的功能 (這個功能和英文的不太一樣,如果用過 Magic或 Hero的人應該會了解)。
明天再寫個比較完整的 feature list 供大家參考。
其實本來一直用開 HTC Magic,也有寫其他的app,但是沒有想過寫中文 Keyboard,因為老實說 HTC做的 Keyboard 真的很不錯,要比 android 本身的好。直到一個月前轉用了 Nexus One,找來找去都找不到合心意的中文 Keyboard,總是不及 HTC 的好用,於是把心一橫,用了一個月時間自己寫了一個出來了。雖然還不算完美,但至少HTC Keyboard上我覺得不錯的功能都有了,例如英文的 auto correction, auto completion,以及儲存用戶定義的字。中文方面我個人主要用倉頡或筆劃,所以先把這兩個輸入法加進去(將來還會加其他的,如果有人需要的話),同時也有聯想字和儲存中文詞的功能 (這個功能和英文的不太一樣,如果用過 Magic或 Hero的人應該會了解)。
明天再寫個比較完整的 feature list 供大家參考。
Subscribe to:
Posts (Atom)




















