Порядок гибких вкладок важен как для удобства использования (очевидно), так и для доступности (он определяет порядок чтения чтения с экрана). Однако Flex 3.5, похоже, почти не имеет поддержки, чтобы повлиять на него для более сложных приложений.
Из того, что я знаю до сих пор:
порядок вкладок вычисляется mx.managers.FocusManager, который заботится об одном «цикле вкладок» для всего приложения (т. Е. Не один для каждого контейнера, а один для всего приложения). Исключением являются встроенные файлы .swf и всплывающие окна, каждый из которых имеет свой собственный FocusManager.
логика внутри FocusManager помечена как приватная, а класс создается в Application.initialize (), поэтому изменить поведение непросто (если не считать переписывания частей SDK, что может вызвать проблемы с лицензией )
Порядок табуляции ищет для каждого компонента tabIndex (int) свойство. Все компоненты, для которых установлено это свойство (> 0), упорядочены по его значению, в противном случае используется визуальная иерархия (которая использует вложение контейнера и дочерний порядок внутри контейнеров).
Все компоненты без tabIndex сортируются после того, как компоненты, для которых они установлены (внутренне «tabIndex not set» сопоставляется с «tabIndex = int.MAX_VALUE)
два компонента с одинаковым tabIndex упорядочены по визуальной иерархии.
Это означает, что вы можете либо использовать автоматическое упорядочение по визуальной иерархии (в основном то, что вам нужно), либо вы можете использовать указание tabIndexes напрямую - НО, если вы сделаете это, вы полностью закрутите автоматическое упорядочение. Это особенно плохо, если вы работаете с пользовательскими компонентами и хотите изменить порядок вкладок внутри них: как только вы это сделаете, вы уничтожили порядок вкладок для всех экранов, использующих ваш компонент. Также вы не можете просто установить порядок вкладок только в файле mxml самого высокого уровня, так как часто у вас нет доступа к внутренней работе используемых вами компонентов.
* 1 028 * Пример:
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>
Application.mxml
Ожидаемый результат: В порядке табуляции будут сначала три вертикальных элемента слева, а затем три вертикальных элемента справа, то есть сгруппированные по контейнерам. TopLevelElement является первым в порядке табуляции.
(он работает точно так же, если не указан tabIndex, однако тогда мы не сможем фактически изменить tabIndex, например, на переключатели One и Three по тем причинам, по которым мы могли бы это сделать)
Фактический результат: порядок вкладок горизонтальный, то есть переход между двумя формами ввода. TopLevelElement (без указанного tabIndex) является последним в порядке табуляции.
Изменение вложенности контейнеров не будет работать в модульных проектах, а изменение порядка дочерних элементов повлияет на их позицию отображения (тогда как переход к контейнеру Canvas приводит к потере AutoLayout).
Есть ли способ (возможно, сложный, но желательно не переписывающий SDK) указать порядок вкладок для отдельных компонентов, независимо от других компонентов?
Если все остальное не поможет, поможет ли обновление до Flex4 решить эту проблему?