Flex工程里TextField在fp10.1下不能输入中文的解决办法

发表评论 阅读评论

前段时间项目测试突然发现中文输入不正常,有时IME会失效,反复测试后发现这是fp10.1的一个bug. 然后提交到http://bugs.adobe.com/jira/browse/FP-4813,可是正式版的flashplayer已经发布了,要修复这个bug也要等到下个flashplayer版本。
我们的项目可等不了那么久,于是找找其他解决办法, Google,百度后都没有提到过类似的问题.
设置IME.enabled = true也不管用。
仔细测试后发现:Flex的TextInput可以输入中文,既然flex的可要输入,那么TextField也应该可要输入中文的。
于是翻开mx.controls.TextInput的源码仔细查看. 几经测试后终于在一处注释处发现了一点线索.

We don't call IME.conversionMode here. We call it only on focusIn. Thus fringe cases like setting imeMode dynamically without moving focus, through keyboard events, wouldn't change the mode. Also getting imeMode asynch. from the server which gets delayed and set later after focusIn is not handled as having the text partly in one script and partly in another is not desirable.

既然说在获得焦点后设置imeMode,那么我是不是也应该在focuseIn后设置IME.enabled呢。
说干就干,马上做了一个测试,果然成功了。困扰我多时的问题终于解决了。

具体代码如下:

input.addEventListener(FocusEvent.FOCUS_IN, focusInHandler);
function focusInHandler(e:FocusEvent):void 
{
    IME.enabled = true;
}

  1. piggy | #1

    piggy :
    感激啊,查了好几个小时了,终于发现了这个, ie/firefox都行了。
    不过好像chrome不灵。

    chrome的也行了,要设置wmode为window
    再次感谢

  2. piggy | #2

    感激啊,查了好几个小时了,终于发现了这个, ie/firefox都行了。
    不过好像chrome不灵。

  3. heiyeliuying | #3

    原来是这样,难怪我一直试都搞不出来,原来根本就不行。谢谢大侠了。

  4. lite3 | | #4

    @heiyeliuying
    不能,至少纯flash是不能的.
    因为flash里所谓的IME是指搜狗,QQ拼音,这样的输入法.
    而对IME的操作必须要启用IME才行, 比如说我们普通的Ctrl+Space 切换输入法到英文. 那么flash就不能操作IME了, 必须在启用搜狗,QQ拼音这样的输入法的时候才能操作要输入中文还是英文,要半角还是全角.

  5. heiyeliuying | #5

    请问,我现在有这么一个需求,需要我设置一个textInput获取到焦点的时候,默认的就是中文输入法。请问这个应该怎么实现呢,我看了很多书籍和代码了,貌似都没有办法解决,你能帮我写一个小程序吗,展示一下,发到我邮箱中chenzheng_java@163.com

  6. nick lee | #6

    哥们你真是天才呀,解决大问题了,谢谢啦

  7. ea | #7

    thankyou...解释比较详细。

  8. lite3 | | #8

    @O.u
    Flex框架下有N多问题,现在我们已经改成纯AS项目了 :roll:

  9. O.u | #9

    困扰好几个月的问题终于解决了!激动哽咽中.........

  10. makyoo | | #10

    nice ! 同样的问题 终于找到方法解决了 顶一下

  1. 本文目前尚无任何 trackbacks 和 pingbacks.
回到顶部