前段时间有做一款是基于传统的T9键盘没有触摸屏的机型,导致常规的输入法无法使用,说下开发一款T9实体按键输入法app的大概流程。
1.输入法的核心部分是InputMethodService,这个服务提供输入法的UI,处理用户输入和传输文本到指定区域以及当前焦点的回调。写一个继承InputMethodService的类,在AndroidManifest.xml配置该服务。
2.对InputMethodService类中方法的重写。在onCreateInputView方法中进行软键盘视图的实例化,T9实体按键输入法是不显示软键盘的,so要重写onEvaluateInputViewShown()返回false。public View onCreateCandidatesView()实例化候选字视图,候选窗UI按需定制。InputMethodService是一个服务,在onCreate()初始化参数。
3.对按键的监听,public boolean onKeyDown(int keyCode, KeyEvent event)按键按下被调用,public boolean onKeyUp(int keyCode, KeyEvent event) 按键抬起被调用。输入逻辑就在这两个方法中处理。
4.知道要开发的输入法每个按键对应的丝印,例如在英文模式下按键2对应的字符是 ‘a’, ‘b’, ‘c’ ‘2’,‘A’, ‘B’, ‘C’, 印地语模式下按键2对应的字符是’च’,‘छ’,‘ज’,‘झ’,‘ञ’,‘ज़’,‘२’,‘2’。了解各个语言下各个字符对应的unicode,每种语言中的每个字符设定了统一并且唯一的unicode,例如字符च的unicode是U+091A。
5.代码逻辑的处理,按键按下要做什么操作,按键抬起要做什么操作,按了一个按键后再按另一个按键要做什么操作,接连多次按下同一个按键要做什么操作,这都是要按需定制。例如在我自己开发的app中,在英文模式下,按下2键要弹出候选窗,候选窗要显示 ‘a’, ‘b’, ‘c’ ‘2’,‘A’, ‘B’, 'C’多个字符,2键抬起时如果1s内无操作,对选中的字符提交输入并隐藏候选窗。如果接连多次按下同一个2键的话,在候选窗中选中下一个字符。如果按下2键抬起后在1s内按了另一个键的话提交输入选中的字符隐藏2键对应的候选窗,弹出新键对应的候选窗并默认选中某个字符。
6.熟悉IME api。