|
http://www.evan129.com/2009/06/26/webos-input-method-design/
) {" X/ _, V T5 T1 p
* s4 X" H8 T, E# S& R, P5 {至今还没见过Pre真机呢,唉。前些天和streatsmart聊起,讲到pre上的中文输入法实现。我想当然地说,和android, iphone早期一样,没有输入法框架,也没SDK,估计是不怎么可能作系统级输入法的啦,哪有都像palm os这么多方式好hack的。他说,palmer@ifan提到,用js应该可以实现。虽然没有什么详细内容,我只是觉得或许也可以看下,载了webOS的rom看了下源码。发现几个textField控件的实现都是有源代码的。
+ t9 ~# Z9 X1 o: G可以看下如普通文本输入框的源码,在 /usr/palm/frameworks/mojo/submissions/175.7/javascripts/widget_textfield.js 。系统控件本身也有事件处理,比如当然要注册按键事件处理' j5 {2 x" T2 O
- n x: e5 N8 j5 i% Hthis.handleKeyDownEvent = this.handleKeyDownEvent.bind(this); n! q& f& Y0 }1 g) y5 M: ^
this.controller.listen(this.controller.element, "keydown", this.handleKeyDownEvent);/ _7 A1 f( x# P* U0 T) [' i
this.handleKeyUpEvent = this.handleKeyUpEvent.bind(this);
/ E# D" s! v- Y' `4 t5 r4 |. A8 S' D1 g+ Xthis.controller.listen(this.controller.element, "keyup", this. handleKeyUpEvent);
* |8 j2 D9 ^3 } ~/ w) m+ l: I, w% B6 Y# j3 m4 b& L" \
那么就可以在handleKeyDownEvent里加入自己的代码。加一个浮动
% }, i7 Z6 X+ x1 q P# b区域飘浮在当前的输入框上方用来显示候选词。可以取到当前textfield的绝对位置,这个框也可以定位得很精准。如果做inline式输入法,要自己绘制下划线,可能处理起来麻烦一点。要是和巨硬这类一样在外部窗口先确定字再入框的话,那只要第一个按键下去,显示输入框,剩下的就用输入框本身来处理后面的控件事件就可以。
( E. l1 a, f' f; h% M- u/ F3 I1 K @- z这样做的好处很明显,纯js实现,不需要考虑没有SDK,编译linux native code有困难,没有接口文档,不能做通讯这些问题。缺点当然是效率会有问题。不过可以先做个单字输入法凑和着用。码表直接用一个json格式存储就好了。还有个缺点就是代码不保密,不过看起来webOS上大多程序都有这问题。
. T& y. W6 u# h; D- {不过看了下,textfield有好几种类型,而且甚至不是相互继承的,那么就需要把输入法相关的js单独提出来作一个文件,再在各种textfield 里都调用下。相信对于标准输入框应该可以解决了。额外的,可以再做个独立的程序(或者直接用memo程序也行),输入字后可以复制粘贴,用于一些特殊的不能生效的情况。
5 R! j, N3 l6 W5 Z: c% ~有了root权限,替换和写入这些js文件应该没有什么问题。
% G$ p( l* ?: Q$ F0 l: F
" O, ^4 w' Q! `% `8 `嗯,最后是版权声明。如果您使用了这种方式来实现webOS上的输入法的话,希望能声明想法来源,及标明本页链接。 |
|