一、针对物理按键
1、电源键和HOME键是由系统截获,不初级应用程序自定义
2、对于back,menu应该拦截Keyup(????)
3、在onKeyDown函数中通过keyCode处理想处理的事件,返回true,则应用程序将事件消耗掉,如果返回false则会让系统再调用对应的方法(如拦截了音量的上下键消息,在上键中先用Toast输出返回true,在下键中先用Toast输出返回false,之后运行程序会发现按下上键后只有Toast打印的消息,系统音量不会增加,按下下键在打印消息的同时音量会下降)
eg、模仿按两次back退出程序
需要一个成员Bool变量 isExit=false;
首先是捕获keyDown消息
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
switch (keyCode) {
case KeyEvent.KEYCODE_CAMERA:
Toast.makeText(this, "Pressed Camera Butto", Toast.LENGTH_SHORT).show();
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
Toast.makeText(this, "Pressed Volume up", Toast.LENGTH_SHORT).show();
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
Toast.makeText(this, "Pressed Volume down", Toast.LENGTH_SHORT).show();
return false;
case KeyEvent.KEYCODE_BACK:
QuitApp();
return false;
default:
break;
}
return super.onKeyDown(keyCode, event);
}
然后实现QuitApp(),其实就是判断当前isExit,如果是true则直接退出,如果是false将其设为true,用Toast打印一个提醒,再利用handler发送一个延迟消息mHandler.sendEmptyMessageDelayed(0, 3000); 3000代表延迟的事件
最后在handler的处理消息的函数中将isExit设为false。
二、针对菜单
1、对于options Menu,在Activity创建时会调用onCreateOptionsMenu(只会调用一次),利用menu.add的方法为菜单添加选项。
之后每次呼出菜单前都会调用一次onPrepareOptionsMenu以便对菜单做出修改(增加条目或者别的)。
点击菜单中的选项时会调用onOptionsItemSelected方法,根据item.getItemId()方法来判断是哪个菜单项被点击以便做出相应的反应。
2、针对与context Menu。利用registerForContextMenu(View);方法,参数是任意一个视图(可通过findviewbyid()方法找到)将制定视图设置为一个上下文菜单(长按此视图会出现菜单选项)
重写onCreateContextMenu()方法创建此上下文菜单,同样利用menu.add()方法来添加菜单选项
重写onContextItemSelected()来响应context menu的菜单选项的点击事件
3、可以添二级菜单subMenu
SubMenu textMenu=menu.addSubMenu("Change Text");
textMenu.add(0,ID_TEXT1,0,choices[0]);
textMenu.add(0,ID_TEXT2,0,choices[1]);
textMenu.add(0,ID_TEXT3,0,choices[2]);
当点击Change Text这个选项时,会弹出textMenu这个菜单(它的菜单项的点击事件同样在onContextItemSelected()中根据菜单项的ID来处理)
4、用xml文件来定义菜单 并在之前所讲的方法中找到合适的方法来调用。
在调用时需要用到MenuInflater将xml文件转换为menu对象,如 MenuInflater inflater=getMenuInflater(); inflater.inflate(R.menu.myment,menu);
处理菜单项点击事件一样通过item.getItemId(),每个菜单项的id为其xml文件中所设置的id,如R.id.……
三、针对控件
设置监听其可以使用控件对象的.set……Listener(),也可以让Activity实现相应监听器的接口,再在类中实现响应的方法如onClickListener的onClick(View)方法,通过view的id来判断是哪个控件。
1、对于按钮控件
常用监听其有onClickListener()、onLongClickListener()等
四、手势的监听
1、监听滑动手势
a、通过手势检测器GestureDetector来重写其中的方法,如onDown、onFling、onLongPress、onScroll、onShowPress、onSingleTapUp等
GestureDetector gd=new GestureDetector(){
//重写其中需要的方法
}
再在Activity中重写onTouchEvent(MotionEvent event)在其中调用gd.onTouchEvent(event)
2、多点触控的监听
a、使用OnTouchListener()