フレックス タブの順序は、使いやすさ (明らか) とアクセシビリティ (スクリーン リーダーの読み取り順序を定義する) の両方にとって重要です。ただし、Flex 3.5 には、より複雑なアプリケーションに影響を与えるサポートがないようです。
私がこれまでに知っていることから:
タブの順序は mx.managers.FocusManager によって計算され、アプリケーション全体で 1 つの「タブ サイクル」を処理します (つまり、各コンテナーではなく、アプリ全体で 1 つです)。例外は、埋め込まれた .swf ファイルとポップアップで、それぞれに独自の FocusManager があります。
FocusManager 内のロジックは非公開としてマークされ、クラスは Application.initialize() でインスタンス化されるため、動作を変更するのは簡単ではありません (SDK の一部を書き直す以外に、ライセンスの問題が発生する可能性があります)。
タブの順序は、各コンポーネントの tabIndex (int) プロパティを探します。このプロパティ セット (>0) を持つすべてのコンポーネントは、その値によって並べ替えられます。それ以外の場合は、ビジュアル階層が使用されます (コンテナーのネストとコンテナー内の子の順序を使用します)。
tabIndex のないすべてのコンポーネントは、それが設定されているコンポーネントの後になるようにソートされます (内部的に、「tabIndex が設定されていません」は「tabIndex = int.MAX_VALUE にマップされます)」
同じ tabIndex を持つ 2 つのコンポーネントは、ビジュアル階層によって並べられます。
これは、視覚的な階層による自動順序付けを使用できることを意味します (主に必要なもの)、または直接 tabIndexes を指定して使用できますが、これを行うと、自動順序付けが完全に台無しになります。これは、カスタム コンポーネントを使用していて、それらの内部でタブの順序を変更したい場合に特に問題です。これを行うと、コンポーネントを使用しているすべての画面のタブの順序が台無しになります。また、使用するコンポーネントの内部動作にアクセスできないことが多いため、最高レベルの mxml ファイルだけにタブの順序を設定することはできません。
例:
accVerticalStuff.mxml
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Label text="One"/>
<mx:TextInput tabIndex="1" id="One" />
<mx:Label text="Two" />
<mx:TextInput tabIndex="2" id="Two"/>
<mx:Label text="Three" />
<mx:TextInput tabIndex="3" id="Three"/>
</mx:VBox>
アプリケーション.mxml
期待される結果:タブ オーダーは、最初に左側の 3 つの垂直項目、次に右側の 3 つの垂直項目、つまりコンテナーごとにグループ化されます。TopLevelElement は、タブ オーダーの最初です。(tabIndex が指定されていない場合は、まさにこのように機能しますが、実際に tabIndex を変更して、たとえば One と Three を切り替えたいなどの理由で変更することはできません)
実際の結果:タブの順序は水平です。つまり、2 つの入力フォーム間をジャンプします。TopLevelElement (tabIndex が指定されていない) は、タブ オーダーの最後です。
モジュール化されたプロジェクトではコンテナの入れ子を変更しても機能せず、子の順序を変更すると表示位置に影響します (一方、Canvas コンテナを使用すると AutoLayout が失われます)。
他のコンポーネントとは無関係に、単一のコンポーネントのタブ順序を指定する方法はありますか (おそらく複雑ですが、できれば SDK を書き直す必要はありません)。
他のすべてが失敗した場合、Flex4 へのアップグレードはこの問題の解決に役立ちますか?