如何更改Flex中的Tab键排序(Actionscript,SDK 3.5)
flex选项卡的顺序对于可用性(显而易见)和可访问性(它定义了屏幕阅读器读取顺序)都很重要.但是,Flex 3.5似乎没有任何支持来影响更复杂的应用程序.
据我所知,到目前为止: >标签排序由mx.managers.FocusManager计算,它负责整个应用程序的一个“标签循环”(即每个容器没有一个,但整个应用程序没有一个).嵌入.swf文件和弹出窗口是个例外,每个文件和弹出窗口都有自己的FocusManager. 这意味着您可以通过可视化层次结构使用自动排序(主要是您想要的)或者您可以直接使用指定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> Application.mxml 预期结果:选项卡顺序首先是左侧的三个垂直项目,然后是右侧的三个垂直项目,即按容器分组. TopLevelElement是Tab键顺序中的第一个. 实际结果:标签排序是水平的,即在两个输入表格之间跳转. TopLevelElement(未指定tabIndex)是Tab键顺序中的最后一个. 更改容器的嵌套在模块化项目中不起作用,更改子项的顺序会影响它们的显示位置(而使用Canvas容器会丢失AutoLayout). 有没有办法(可能很复杂,但最好不要重写SDK)来指定单个组件的标签排序,而与其他组件无关? 如果所有其他方法都失败了,升级到Flex4有助于解决这个问题吗? 解决方法
经过一番研究后我发现了以下内容:
> if(甚至是单个)DisplayObject具有tabIndex> 0表示从现在开始按下TAB只会在使用tabIndex>的实例之间切换焦点. 0 我认为TAB列表中的太多实例是无用且令人讨厌的,因此管理它的最佳方法应该是使其等于top列表例如当前应用状态的10个最有用的UI元素. 以及一些代码(基于您的示例): <mx:VBox xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:fx="http://ns.adobe.com/mxml/2009" data="1,2,3" creationComplete="addFocuses();"> <fx:Script> <![CDATA[ private function addFocuses():void{ var focs:Array = data.split(','); One.tabIndex = focs[0]; Two.tabIndex = focs[1]; Three.tabIndex = focs[2]; } ]]> </fx:Script> <mx:Label text="One"/> <mx:TextInput id="One" /> <mx:Label text="Two" /> <mx:TextInput id="Two"/> <mx:Label text="Three" /> <mx:TextInput id="Three"/> </mx:VBox> Main.mxml: <mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:th="showclasses.*"> <mx:HBox> <th:NewFile data="1,3" /> <th:NewFile data="1,3" /> </mx:HBox> </mx:Application> 如果数据值是1,3; 1,3 – 焦点从左向右水平移动(当然因为tabIndex在每一行内是恒定的)然后切换到下一行的左元素.如果他们是2;空,3; 0,null,1(对于tabIndex为null == 0) – 焦点将出现在右下角然后在左上角,最后出现在center.hope中这将是有用的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |