---
# System prepended metadata

title: 注音輸入法Survey結果(Android)

---

# 注音輸入法Survey結果(Android)

survey時間：2022/02/23~2022/03/04

## 簡述
Q：**做中文注音鍵盤可能需要面對什麼困難?**
A：鍵盤本身並不困難，困難的是實現注音輸入法與自動選字

>實作注音輸入法需要考量的幾個問題：（註：手機輸入習慣與電腦打字不同）
當使用者輸入ㄅ，可以簡單列出所有ㄅ發音開頭的單個漢字，但如何考慮優先序？
當使用者輸入ㄅㄅ，自動選字如何預判應該出現什麼字詞？(爸爸、掰掰、拜拜、掰餔、八八？)
絕不可能出現（==所有ㄅ發音開頭的單個漢字==X==所有ㄅ發音開頭的單個漢字==）的組合，因為這些組合中絕對有些無法拼為日常字詞。
當使用者輸入ㄐㄊㄨㄕㄇㄒㄒㄧㄚㄩ(今天為什麼下雨)，自動選字又如何預判應該出現什麼字詞？

>假設：
作為一個手機軟鍵盤的使用者，
是否能夠容忍輸入一個注音符號，自動選字所花費的時間就長達1-2秒以上？
是否能夠忍受需要一直滾動才能找到常用的字詞？

由以上的假設，可以概略理解自動選字的核心關鍵在於==對詞庫搜尋的速度==與==所有可能字詞的優先序排列==。


---

## Android中實現自動選字嘗試的方法
### [SpellCheckerSession](https://developer.android.com/reference/android/view/textservice/SpellCheckerSession)
這是由官方提供的拼字檢查API，相關資訊並不是很多，初步嘗試Locale.ENGLISH的設定可以運作。但當嘗試將Locale切換為其他地區則失敗。

### [2010官方提供的注音輸入法](https://code.google.com/archive/p/android-traditional-chinese-ime/source/default/source)
因為資源老舊，有做一些調整放到自己的[github](https://github.com/yemugogogo/GoogleSoftKeyboard)，想快速跑code看可以直接載調整過後的。

[操作影片](https://drive.google.com/file/d/1-B5uDyaoIDmsSlREEbwT1sITt_-WO_yZ/view?usp=sharing)

如影片所示，這樣的輸入法(2011資源)已經不符合當前(2022)的使用者體驗。

### [js注音](https://github.com/timdream/jszhuyin/)
這是由javascript為框架寫的library，是目前找到最理想的注音輸入法實作，然而Android Studio無法直接跑javascript library，想到三種方式有機會可以實現：

1. #### 找到方法讓Android Studio IDE能夠直接使用javascript library
    這樣的做法沒有做太深入的嘗試，因為不太確定尋找資源的方向，也不保證即使成功串接會不會產生更多後續未知的問題。

2. #### 使用javascript寫鍵盤App
    因為對javascript語法完全陌生，因此在目前為止的嘗試中暫不考慮該方法。
3. #### 根據javascript注音的邏輯復刻成Kotlin version的App
    js注音原理是將小麥詞庫壓縮為某種結構的binary data，以此達到節省空間與快速搜尋的目標。(空間越小，搜尋速度越快)
    該做法是選擇花費較多時間嘗試的做法，也是個人認為最可行的做法。最終放棄原因：
    * 時間成本考量
    * javascript 與 kotlin 對應語法部分轉換遇到困難
    * 對binary data存取操作不熟悉

### 未嘗試作法
* decompile 市場其他鍵盤產品APK
