首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > BlackBerry >

BlackBerry按键捕杀分析

2012-09-04 
BlackBerry按键捕捉分析protected boolean keyDown(int keycode, int time) {System.out.println(Screen1

BlackBerry按键捕捉分析
protected boolean keyDown(int keycode, int time) {System.out.println("Screen1.keyDown():"+keycode);return true;}

?此方法返回true,那么表示当前key事件由Screen处理,不会再往下传递给子组件。如果返回false则反之。

?

如果Screen或者父组重写了捕捉key事件的方法,并且返回true,那么子组件是接收不到消息的。

?

关于keyDown和keyChar两个方法。keyDown优先于keyChar,如果一个组件中这个两个方法同时被重写,并且keyDown返回了true,那么keyChar是不能被调用的。

?

请看代码:

?

import net.rim.device.api.ui.Keypad;import net.rim.device.api.ui.UiApplication;import net.rim.device.api.ui.component.ActiveRichTextField;import net.rim.device.api.ui.container.MainScreen;/** * @site http://androidos.cc http://mdev.cc * @author SinFrancis Wong * @since 2009-12-09 * */public class Main extends UiApplication {public Main() {pushScreen(new Screen1());}public static void main(String[] args) {Main m = new Main();m.enterEventDispatcher();}}class Screen1 extends MainScreen {ActiveRichTextField f;public Screen1() {f = new ActiveRichTextField("catch key....") {protected boolean keyChar(char c, int status, int time) {//keyChar方法似乎捕捉不到menu按键事件,可以用keyDown捕捉System.out.println(".keyChar():"+c);if (c == Keypad.KEY_BACKSPACE) {//捕捉Back space键f.setText("catch the KEY_BACKSPACE key...");return true;} else if (c == Keypad.KEY_ESCAPE) {//捕捉back键f.setText("catch the BACK key...");return true;} else {f.setText("catch other key value is  :" + c);return true;}}protected boolean keyDown(int keycode, int time) {if (keycode == 268566528) {//menu的int值f.setText("catch the MENU  key...");}System.out.println(".keyDown():"+keycode);return false;}};add(f);}protected boolean keyDown(int keycode, int time) {System.out.println("Screen1.keyDown():"+keycode);return false;//交给子组件处理}}
?

?

?

以上代码在BB 9500机器上测试是正常捕捉按键事件的。

如果将最后的一段keyDown代码返回true,点击是没有任何反应得(在debug模式下能看到打印的消息),因为消息没有往下传递,全部被Screen消耗掉了。

?

protected boolean keyDown(int keycode, int time) {System.out.println("Screen1.keyDown():"+keycode);return true;//交给子组件处理}

?

?

?

?

热点排行