Flex 自动获取焦点 监听全局键盘事件_Flex

这是《Flex第一步》QQ群里面一个朋友问我的问题,特此拿出分享一下。或许问题比较简单,还是将其记录一下比较好。
需求如下:
当AIR启动后,监听全局键盘事件,即this.addEventListener( KeyboardEvent.KEY_DOWN, keydownHandler );
运行后效果:
当AIR运行后,虽然正确监听了KeyboardEvent.KEY_DOWN event,但是必须要鼠标点击一下AIR才可以获取keydownHandler。
原因:
1、keydownHandler的获取需要监听的对象获得焦点,当mouse click AIR后,则相当于获取焦点。
2、只有当监听的对象获取焦点后,才能出接收到KeyboardEvent.KEY_DOWN event。
因此问题根结:
如何让监听对象自动获取焦点。
解决方案:(步骤)
1、
this.dispatchEvent( new MouseEvent( MouseEvent.CLICK ));
通过以上的方式即可让程序“自动点击”dispatchEvent的对象。
2、
获取焦点方式:
this.stage.focus = this; 

<s:WindowedApplication
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
creationComplete="createCompleteHandler (event)">
private function createCompleteHandler( event : FlexEvent ) : void {
//监听ouseEvent.CLICK event
this.addEventListener( MouseEvent.CLICK, clickHandler );
//监听KeyboardEvent.KEY_DOWN
this.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler );
}
private function clickHandler( event : MouseEvent ) : void {
this.stage.focus = this;
}
private function keyDownHandler( event : KeyboardEvent ) : void {
//TO DO
}
自动触发mouse click的代码:(以下代码在this.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler );的下面)
var timer : Timer = new Timer( 100, 1 );
timer.addEventListener( TimerEvent.TIMER_COMPLETE, function ( event : TimerEvent ) : void {
event.target.stop();
dispatchEvent( new MouseEvent( MouseEvent.CLICK ));
});
timer.start();
之所以用timer来处理是因为当create complete后,直接使用dispatchEvent会发现stage尚未赋值,因此需要延时一段时间处理。
注意:以上代码适用于AIR,在Flex里面按照如下写法仍旧无法获取KeyboardEvent.KEY_DOWN event。
Flex里面是如何自动获取焦点、监听全局键盘事件的呢?
原因:
Flex由于有浏览器的包裹,因此当打开浏览器后,由于SWF尚未获取焦点,因此就算自动获取了焦点(dispatchEvent( new MouseEvent( MouseEvent.CLICK ));)也是没有意义的。
解决方法:
在嵌入SWF的html里面加入如下的功能:
<body onload="document.getElementById('swf id').focus()">
这句话的含义:当onload完毕后,自动设定SWF为焦点状态。
最后再按照AIR的写即可完成自动获取焦点、监听全局键盘事件。
由于代码比较少,因此就不放上demo了,以上的片段代码足以说明问题:)

时间: 2024-09-23 03:42:11

Flex 自动获取焦点 监听全局键盘事件_Flex的相关文章

Android项目类似淘宝 电商 搜索功能,监听软键盘搜索事件,延迟自动搜索,以及时间排序的搜索历史记录的实现_Android

最近跳槽去新公司,接受的第一个任务是在 一个电商模块的搜索功能以及搜索历史记录的实现. 需求和淘宝等电商的功能大体差不多,最上面一个搜索框,下面显示搜索历史记录.在EditText里输入要搜索的关键字后,按软键盘的搜索按键/延迟xxxxms后自动搜索.然后将搜索的内容展示给用户/提示用户没有搜到相关信息. 历史记录是按时间排序的,最新的在前面,输入以前搜索过的关键字,例如牛仔裤(本来是第二条),会更新这条记录的时间,下次再看,牛仔裤的排列就在第一位了.并且有清除历史记录的功能. 整理需求,大致需

在flex中监听鼠标右键事件,提示 TypeError Error 2007 参数type不能为空。

在flex中监听鼠标右键事件 ,报错,提示 缺少参数. TypeError: Error 2007: 参数 type 不能为空. at flash.events::EventDispatcher/addEventListener() at com.waylau.eagleos.components::DesktopExplorer/service_resultHandler()[D:\workspaceFB47\com.waylau.eagleos_0.9.5\src\com\waylau\ea

android-不用编辑文本监听虚拟键盘按键

问题描述 不用编辑文本监听虚拟键盘按键 有没有方法可以监听键盘,如果在Fragment的onCreateView 方法键盘情况是这样的时候: getActivity().getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 还需要键盘在数值模式. 谢谢 解决方案 如果在activity中重写onKeyDown方法,你可以监听键盘按下事件. public boolean

android监听软键盘的弹出与隐藏的示例代码

情境:布局文件中有ScrollView,ScrollView中有个EditView,布局底部有一个控件(见下面布局代码),程序一启动EditView就获取焦点,弹出软键盘,将这个底部的控件也顶上去了,感觉不太好,所以我就想监听下软键盘弹出,此时去隐藏底部控件,软键盘隐藏时则显示底部控件. 初始: <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/ac

Android 监听软键盘搜索键

  现在很多的Android应用都有了数据搜索功能,在以往的设计上,会使用搜索框+搜索按钮来实现搜索功能: 现在呢,越来越流行的是,去除搜索按钮,直接监听软键盘搜索键,当用户输入完搜索关键字后,直接点击软件盘上的"所搜"键,查询要搜索等信息.   要实现上面的搜索效果,当然,我们要监听软键盘的搜索键. EditText mEditSearch = (EditText)this.findViewById(R.id.mEditSearch); mEditSearch.setOnEditor

IOS之UI--自定义按钮实现代理监听点击事件

前言: Objective-C提供的按钮监听事件的方法是 不含参数的监听方法 [button实例对象 addTarget:self action:@selector(func) forControlEvents:UIControlEventTouchUpInside]; 含参数的监听方法 [button实例对象 addTarget:self action:@selector(func:) forControlEvents:UIControlEventTouchUpInside]; 下面通过代理的

js监听滚动条滚动事件使得某个标签内容始终位于同一位置

 js如何监听滚动条滚动事件,使得某个标签内容始终位于同一位置,下面有个不错的示例,大家可以参考下 小知识点,废话不多说,直接上代码    css:   代码如下: <pre name="code" class="css"><style>  #anchor:{  position:absulate;  top:40%;  left:40%;  width:100px;  height:100px;  background-color:red;

Android App监听软键盘按键的三种方式

前言: 我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的"GO"按键加载url页面:在点击搜索框的时候,点击右下角的search符号键可以进行搜索:或者在全部数据输入完毕后,点击右下角的"done"就马上进行下一步操作. 效果图: function 1: 重写Activity的dispatchKeyEvent(KeyEvent event)方法,在其中监听KeyEventKey.KEYCODE

jquery-ui-draggable-事件捕获对一个元素监听拖动事件并对这个元素的子元素监听点击事件

问题描述 事件捕获对一个元素监听拖动事件并对这个元素的子元素监听点击事件 在不支持事件冒泡的浏览器中.对一个元素监听拖动事件并对这个元素的子元素监听点击事件.这两个事件会冲突.只能执行拖动事件.这种问题怎么解决? 解决方案 Preference元素和监听事件 解决方案二: 说明你没点击到子元素,一般是从子元素冒泡,不支持冒泡不会触发父元素的拖动事件 不过有哪种浏览器不支持冒泡?还没碰到过.. 解决方案三: 浏览器都支持冒泡啊,如果你只用捕获,那么肯定是先监听到父元素的事件,再是子元素,但问题是你