android学习笔记——事件处理器和事件监听器

一、针对物理按键

 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()

  

你可能感兴趣的:(android学习笔记——事件处理器和事件监听器)