如何以编程方式将焦点设置到 HorizontalList 以便它可以接收按键事件(Flex)?
-
06-07-2019 - |
题
请看一下代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:creationComplete>
<![CDATA[
list.setFocus();
]]>
</mx:creationComplete>
<mx:HorizontalList id="list">
<mx:creationComplete>
<![CDATA[
setFocus();
]]>
</mx:creationComplete>
<mx:focusIn>
<![CDATA[
trace("Received focus");
]]>
</mx:focusIn>
<mx:keyDown>
<![CDATA[
trace("Key down");
]]>
</mx:keyDown>
<mx:dataProvider>
<mx:Object label="Some"/>
<mx:Object label="Different"/>
<mx:Object label="Stuff"/>
</mx:dataProvider>
</mx:HorizontalList>
正如你所看到的,我努力让我的 HorizontalList
加载应用程序时聚焦。我实际上收到了 Received focus
控制台中的消息。但我希望在设置焦点后能够使用箭头键在列表元素上导航。但事实并非如此。它们仅在用鼠标单击组件后才起作用。那么,我做错了什么?如何使列表具有焦点并响应箭头键?
解决方案
您的应用程序在浏览器中运行吗?您可能必须将焦点设置在 SWF 对象上(通过 JavaScript)才能开始与其交互,而无需先单击该对象。
例如,假设您使用的是 Flex Builder,请尝试在 index.template.html 文件的 SCRIPT 标记末尾添加如下一行:
window.onload = function()
{
document.getElementById("${application}").focus();
};
您可能需要根据您的具体情况进行一些调整,但这可能就是问题所在。明确地将焦点设置在 Flash 对象上应该可以解决问题。希望能帮助到你!
其他提示
我运行了您的代码并能够使用键盘浏览列表 无需点击列表 首先——但是我 必须点击 Flex 应用程序上的某个位置 以便它首先受到关注。我认为这是 flash 的一般限制 - SWF 不会接收键盘焦点,除非您单击其上的某个位置(尽管 mouseOver 仍会被触发)。
不隶属于 StackOverflow