解決方法がわからないモバイルコンポーネントでTextAreaとTextInputを操作するときに、2つの問題が発生しました。1つは、TextAreaテキストが正しく配置されていないこと、もう1つは、他のコンポーネントと重なっていることです。
この問題は、TextAreaがスクローラーにある場合(またはソフトキーボードがアクティブになってTextAreaの位置を移動する場合)に発生します。
以下のコードをモバイルアプリケーションに追加すると、これを確認できます。
<s:Scroller width="100%" height="100%" top="100" bottom="100">
<s:VGroup width="50%">
<s:Button label="" height="600" width="440"/>
<s:TextArea id="testing" />
<s:TextArea id="testing2" />
<s:Button label="" height="800" width="440"/>
</s:VGroup>
</s:Scroller>
最初の画像は、テキストを含むアプリケーションです。
2番目の画像では、いくつか下にスクロールしました。下にスクロールすると、テキストが同じ場所に残っていることに注意してください(その上にあるボタンの上にあります)。
警告:
ビューをスローすると、テキストはすぐに正しい場所(AIR Simulator上)に配置され、コンテンツが最終的な位置に落ち着くと再び正しく配置されます(モバイルデバイスでは、テキストは最後の休憩場所になるまで消えるように見えます) )。手動で押したり、ドラッグしたり、離したり(スローしない)したり、ソフトキーボードをアクティブにしたりしても発生しない何かがスロー時に発生しているため、これは朗報です。
残念ながら、テキストはスクローラーマスクを無視して他のすべてのコンテンツの上に表示される可能性がありますが、他の最初の問題が修正されれば、私はそれで生きることができます。
更新
幅を幅+1に設定すると、テキストを正しい位置に再配置できます。明らかにサイズを変更したくないため、これは機能しません。無効化しようとしましたが、何も機能していません。これがsoftKeyboardActivatingイベントで試したコードです。width = width + 1のコメントを外して、「機能する」ことを確認します。
<s:TextArea id="testing" softKeyboardActivate="testing_softKeyboardActivateHandler(event)"/>
<fx:Script>
<![CDATA[
import mx.core.IInvalidating;
protected function testing_softKeyboardActivateHandler(event:SoftKeyboardEvent):void {
trace("Activating");
/*testing.invalidateProperties();
testing.invalidateDisplayList();
testing.invalidateSize();
testing.validateNow();
parentGroup.validateNow();
scroller.validateNow();*/
// testing.invalidateParentSizeAndDisplayList();
//IInvalidating(testing.parent).invalidateSize();
//IInvalidating(testing.parent).invalidateDisplayList();
//testing.width = NaN;
//testing.width = testing.width+1;
}
]]>
</fx:Script>
更新2:
このコードは機能しますが、ハックであり、ビューがスローされたときにスクローラーが使用しているコードよりもはるかに低速です。
protected function testing_softKeyboardActivateHandler(event:SoftKeyboardEvent):void {
StageTextAreaSkin2(testing.skin).styleChanged("styleName");
}
UPDATE 3
以下の回答セクションに回避策を追加しましたが、これはハックです。また、正しい位置にあると、正しくマスクされます。ですから、それも良いことです。しかし、私はまだこれを行う正しい方法を探しています。
これは、Flex 4.6、AIRSimulator上のMac上のAIR3.5、iPhone 5、およびAndroidNexus7でテストされています。