Android back 事件监听

c_c_yuan 2012-04-01 11:44:13
一些类的信息:
public class Maze3DActivity extends Activity;
class GLGameView extends GLSurfaceView;
其中glgameView 是 Maze3DActivity 调用的一个View。
当然Maze3DActivity 还包括其他的View
问题描述:
在glgameView中重写了 OnkeyDown()方法。但是
情形1:当只是触摸屏幕或者无任何操作,紧接着按虚拟机上的back键 就会直接终止整个程序 。
情形2:如果按了虚拟机上的键盘或者物理键盘,接着按back键,竟然能够实现指定的功能,也就是说事件可以捕获。

重写的代码:
public onKeyDown()
case KeyEvent.KEYCODE_BACK: // 如果按下返回键
if(event.getRepeatCount() == 0) {
event.startTracking();
return true;
}

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// TODO Auto-generated method stub
Log.i("BACK", "DISPATCHkEYeVENT");
return super.dispatchKeyEvent(event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
&& !event.isCanceled()) {
activity.hd.sendEmptyMessage(GAME_MENU);
return true;
}
return super.onKeyUp(keyCode, event);
}

补充说明:
在 情形1 下onkeydown、onkeyup,dispatchKeyEvent 这几个方法都没有进入。我尝试着在activity中重写onKeyDown()的方法,不过依然是无法捕获glgameView 中back 事件。 于是我又在activity中重写了onBackPressed()方法,这个倒是可以捕获任何一种情形的事件,但是这个方法一个参数都没有,我根本就不知道是从哪个view中按back键的。
...全文
437 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
c_c_yuan 2012-04-01
  • 打赏
  • 举报
回复
OK 知道错在哪里了 在activity 中把return true;写成return super.xxx了。但是为什么在view中只要按了键盘上的任意键,就可以在view中监听BACK键了?而否则就会像上面的情形1一样 直接把BACK时间提交给activity处理
c_c_yuan 2012-04-01
  • 打赏
  • 举报
回复
关键是 连 onKeydown这个方法都进不去!
leer168 2012-04-01
  • 打赏
  • 举报
回复
View收不到Back事件。
在你的Activity
public onKeyDown()
case KeyEvent.KEYCODE_BACK: // 如果按下返回键
WhichView.OnBack();//这里添加想监听回退键的View
return true;
}
儿大不由爷 2012-04-01
  • 打赏
  • 举报
回复
自己判断哪个view有焦点呗

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧