環境:Flex2.0.1(どうやらFlex3.0でも変わってなさそう?)
このメモ以降にも色々調べたりAdobeとやりとりしたはずだが、よく覚えてない…
FlashPlayer10との絡みもあったはず。
FlexのTextInputはimeModeプロパティを指定した時変な動きをする。
以下のように入力項目が並んでいるとする。
- 入力①:IME制御なし
- 入力②:ひらがな
- 入力③:IME制御なし
①にフォーカスがある状態で、IMEがONかつひらがな入力の場合、
①→②→③とフォーカスを移動すると③の時点でIMEがOFFになってしまう。
ちなみにIMEはOFFにされるが、変換モード(全角カタカナ、半角英数など)は①の状態を記憶しておき、③に移る時に元に戻している。
③では、②で変更されたモードをそのまま引き継ぐのが通常の動作のように感じる。
個人的には①のモードを記憶しておいて、戻ってくれたほうが使い勝手がいいと思うのだけど。。
//フォーカスINハンドラ
override protected function focusInHandler(event:FocusEvent):void
{
//このへんはフォーカス制御
if (event.target == this)
systemManager.stage.focus = textField;
var fm:IFocusManager = focusManager;
if (editable && fm)
{
fm.showFocusIndicator = true;
if (textField.selectable &&
_selectionBeginIndex == _selectionEndIndex)
{
textField.setSelection(0, textField.length);
}
}
//継承元呼び出し
super.focusInHandler(event);
//IMEモード制御ここから
if (_imeMode != null && _editable)
{
//IMEモードを制御する場合if内通る。
IME.enabled = true; //IMEをON
prevMode = IME.conversionMode; //変換モードを記憶
// When IME.conversionMode is unknown it cannot be
// set to anything other than unknown(English)
try
{
if (!errorCaught &&
IME.conversionMode != IMEConversionMode.UNKNOWN)
{
IME.conversionMode = _imeMode;
}
errorCaught = false;
}
catch(e:Error)
{
// Once an error is thrown, focusIn is called
// again after the Alert is closed, throw error
// only the first time.
errorCaught = true;
throw new Error(
StringUtil.substitute(resourceUnsupportedMode, _imeMode));
}
}
}
//フォーカスOUTハンドラ
override protected function focusOutHandler(event:FocusEvent):void
{
//継承元呼び出し
super.focusOutHandler(event);
IMEモード制御ここから
if (_imeMode != null && _editable)
{
//IMEモードを制御する場合if内通る。
// When IME.conversionMode is unknown it cannot be
// set to anything other than unknown(English)
// and when known it cannot be set to unknown
if (IME.conversionMode != IMEConversionMode.UNKNOWN
&& prevMode != IMEConversionMode.UNKNOWN)
//変換モードがUNKNOWNじゃなかったら前のモードに戻す
IME.conversionMode = prevMode;
//★IMEを強制的にOFFにしてる!★
IME.enabled = false;
}
dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
}
[/js]