Как программно установить фокус на 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, попробуйте добавить строку, подобную этой, в конец тега SCRIPT вашего файла index.template.html:
window.onload = function()
{
document.getElementById("${application}").focus();
};
В зависимости от конкретной ситуации вам может потребоваться немного изменить настройки, но это, вероятно, проблема. Установка фокуса на объекте Flash явно должна помочь. Надеюсь, это поможет!
Другие советы
Я запустил ваш код и смог перемещаться по списку с помощью клавиатуры , не нажимая сначала на список , но мне пришлось щелкнуть где-нибудь в приложении Flex , чтобы он получает фокус в первую очередь. Я думаю, что это ограничение вспышки в целом - SWF не получит фокус клавиатуры, если вы не нажмете где-нибудь на него (хотя mouseOver все равно будет срабатывать).