即使在使用 IME(我现在使用的是日语 IME)时,我也希望能够以编程方式(比如按下按钮时)向 TextInput 添加一个字符。通常这会非常容易,即
protected function button_clickHandler(event:MouseEvent):void
{
ti.text = "k";
}
其中 ti 是一个 TextInput 组件。但是,使用 IME 时,事情会变得有些棘手。例如,即使您使用的是平假名 IME,上面的代码也会在 ti 中添加 ak。我查看了 IME 文档并尝试了类似的方法
protected function button_clickHandler(event:MouseEvent):void
{
IME.setCompositionString("k");
}
起初我认为这是在起作用,但它似乎总是默认为看起来像半角片假名的东西(虽然我不是 100% 确定),即使当前选择了平假名转换模式,或者如果我设置了它在设置合成字符串之前。不幸的是,IME 库似乎不是开源的,所以我不知道这是否是一个错误。
想知道是否有人有任何建议 - 我意识到这是非常具体的,所以几率很低,但我想我会尝试。
谢谢你!
后期编辑:这里有一些代码来试试我在说什么。注意:您需要在您的机器上设置日语 IME。我在带有日文 IME 设置的 Windows 7 机器上使用它,并在独立的 Flash 上运行它。很难看出在平假名和片假名中键入 ak 之间的区别,但如果您仔细观察,您应该会注意到不同之处(如果您在输入“a”后立即看到不同的结果弹出)。
<?xml version="1.0"?>
<!-- dpcontrols/adg/SimpleADG.mxml -->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script>
<![CDATA[
protected function button_clickHandler(event:MouseEvent):void
{
ti.setFocus();
try
{
IME.enabled = true;
IME.conversionMode = IMEConversionMode.JAPANESE_HIRAGANA;
IME.setCompositionString("k");
}
catch (error:Error)
{
trace("Unable to set conversion mode.\n" + error.message);
}
}
]]>
</fx:Script>
<s:VGroup>
<s:TextInput id="ti"/>
<s:Button label="go" click="button_clickHandler(event)"/>
</s:VGroup>
</s:Application>