# T9 输入法笔记(触屏版) ## 1. T9 输入法的中文字典数据 网上可以找到 T9 输入法的中文字典数据,但是通常有两个问题: * 采用 GPL 协议,不太适合加入 AWTK。 * 只支持单个汉字的输入,不支持词组的输入。 经过考虑之后,决定自己生成 T9 输入法的中文字典数据。AWTK 使用了谷歌拼音输入法作为缺省的拼音输入法,谷歌拼音输入法的字典数据质量还是不错的,写一个工具把谷歌拼音输入法的字典数据转换为 T9 输入法的中文字典数据即可。 谷歌拼音输入法的字典数据原始格式为: ``` 汉字 频率 简体/繁体标志 拼音 ``` 如: ``` 中 243213.912993 0 zhong ``` 转换工具要做的事情的是: * 把拼音转换成对应的数字。比 zhong 对应的是 83553。 * 生成适合查询的格式。本来想复用谷歌拼音输入的引擎,但是没有成功,最后决定自己写程序来查询。 转换工具完整的代码请参考:awtk/tools/t9_gen/to_t9_zh.js > 如果需要对字典进行裁剪,可以先编辑原始数据,然后重新生成数据。 ## 2. T9 输入法的英文字典数据 要生成英文字典数据,获取一个英文单词列表,并且按照单词的使用频率进行排序。找 [github](https://github.com/first20hours/google-10000-english.git) 上找到了这样的数据。 同样需要写个小工具,把该数据转成生成适合查询的格式。 转换工具完整的代码请参考:awtk/tools/t9_gen/to_t9_en.js > 该工具应该同样适用于其它西文语言。 ## 3. 对键盘、输入法框架和编辑器进行改进 为了支持 T9 输入法,需要对键盘、输入法框架和编辑器进行改进。 > 随便提一下,SOLID 原则中的开闭原则通常只存在于理想(简单)情况下,一种切实可行的方法是,在早期设计时要考虑将来的扩展,但也无需过度设计,而是每次扩展时都对框架进行完善,让它更适应于将来的扩展。 ### 3.1 支持语言切换 同样是在中文环境下,你可能需要输入中文,也可能需要输入英文。在中文键盘下输入中文,在英文键盘下输入英文。 在键盘切换时需要让输入法引擎知道当前的语言。 #### 3.1.1 键盘 如果需要切换语言,可以给键盘的页面设置一个 lang 属性,用于标识改键盘的语言,切换到该页面时,自动设置输入法引擎的语言。 如: ```xml