flex选项卡的顺序对于可用性(显而易见)和可访问性(它定义了屏幕阅读器读取顺序)都很重要.但是,Flex 3.5似乎没有任何支持来影响更复杂的应用程序.
据我所知,到目前为止:
选项卡排序由mx.managers.FocusManager计算,它负责整个应用程序的一个"选项卡循环"(即每个容器没有一个,但整个应用程序只有一个).嵌入.swf文件和弹出窗口是个例外,每个文件和弹出窗口都有自己的FocusManager.
FocusManager中的逻辑标记为私有,并且该类在Application.initialize()中实例化,因此更改行为并不容易(不能重写SDK的部分,这可能会造成许可证麻烦)
Tab键顺序查找每个组件tabIndex(int)属性.具有此属性集(> 0)的所有组件按其值排序,否则使用可视层次结构(使用容器内的容器嵌套和子顺序).
没有tabIndex的所有组件都被排序为在它设置的组件之后(内部,"tabIndex not set"映射到"tabIndex = int.MAX_VALUE")
具有相同tabIndex的两个组件按可视层次结构排序.
这意味着您可以通过可视化层次结构使用自动排序(主要是您想要的)或者您可以直接使用指定tabIndexes - 但如果您这样做,则完全拧紧自动排序.如果您使用自定义组件并希望更改其中的选项卡顺序,则这一点尤其糟糕:一旦执行此操作,您就会破坏使用组件的所有屏幕的Tab键顺序.此外,您不能仅在最高级别的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>
Run Code Online (Sandbox Code Playgroud)
Application.mxml
预期结果:选项卡顺序首先是左侧的三个垂直项目,然后是右侧的三个垂直项目,即按容器分组.TopLevelElement是Tab键顺序中的第一个.(如果没有指定tabIndex,它会以这种方式正常工作,但是我们无法将tabIndex更改为例如切换One和Three,无论出于何种原因我们可能会这样做)
实际结果:选项卡排序是水平的,即在两个输入表单之间跳转.TopLevelElement(未指定tabIndex)是Tab键顺序中的最后一个.
更改容器的嵌套在模块化项目中不起作用,更改子项的顺序会影响它们的显示位置(而使用Canvas容器会丢失AutoLayout).
有没有办法(可能很复杂,但最好不要重写SDK)来指定单个组件的标签排序,而与其他组件无关?
如果所有其他方法都失败了,升级到Flex4有助于解决这个问题吗?
我目前正在考虑用Maven替换我们非常专有的构建环境.当前的解决方案是中央构建的内部开发,为了更容易的本地开发,我在Eclipse/Flex IDE中编译并有一个ANT脚本将所有内容复制到我的本地Apache目录(即我的ant文件没有完成构建并依赖所有项目在当地可用).
我们将Eclipse 3.6.1(Helios)与Flash Builder插件(即Flex4)一起使用,目标是Flex SDK 3.5(FlashPlayer 10.0),其中包括.swc库项目和.swf模块,这两个项目都在运行时加载,包括每个项目的资源.我们还使用外部链接/运行时共享库(一个大的sharedlibraries.swf包含所有内容,即不需要在部署中使用.swc文件).我已经使用Sonatypes flexmojos-maven-plugin 3.7.1安装了Maven 3.0.2 (因为它看起来比Servebox更活跃).我为每个Eclipse项目手动创建了pom文件,以确保一切正常,Eclipse-Maven集成似乎缺乏Flex支持.我已经定义了适当的编译器和依赖项参数,以便所有单个项目都能正确编译 - 即生成的.swf文件确实生成了我们应用程序的工作版本.我还阅读了Sonatype 的" Maven by Example "一书并查看了他们的" Maven:The Complete Reference ",同时进行了大量的谷歌搜索.
我正在努力的是我的项目的最终组装,以及其他工件(样式表).我并不完全理解"Maven方式",也怀疑Maven是为Java量身定制的,因此我的Flex项目让我有点疯狂.
我项目的基本结构:
我的swf项目的布局:
我正在使用平面层次结构在Eclipse中工作,即我的主pom文件放在一个文件夹中,该文件夹是所有项目文件夹的兄弟.例:
project_swf/src/...
project_swf/WebContent/assets/labels.xlf
project_swf/WebContent/config/config.xml
project_swf/pom.xml
lib_swc/src/...
lib_swc/pom.xml
master_build/pom.xml
master_build/swf-assembly.xml
Run Code Online (Sandbox Code Playgroud)
我已经设法使用这个主pom创建了一个'master build'构建我所有的swc和swf项目:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>Dragon Master Build</name>
<description>This project can be used to build and package the client application</description> …Run Code Online (Sandbox Code Playgroud)