Activity和View都能接收触摸和按键,如果响应事件只需要在继承类里复写事件函数即可;当一个视图(如一个按钮)被触摸时,该对象上的 onTouchEvent() 方法会被调用。不过,为了侦听这个事件,你必须扩展这个类并重写该方法,当一些物理按钮被按下时会调用onKeyDown()方法;
常见的按键消息和触摸消息
[java] view plain copy
- package com.example.androideventdemo;
- import android.os.Bundle;
- import android.view.KeyEvent;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.Toast;
- import android.app.Activity;
- /**
- * Android常用的物理按键及其触发事件
- * KEYCODE_POWER 电源键
- * KEYCODE_MENU 菜单键
- * KEYCODE_BACK 后退键
- * KEYCODE_HOME Home键
- * KEYCODE_CAMERA 相机键
- * KEYCODE_SEARCH 查找键
- * KEYCODE_VOLUME_UP 音量键+
- * KEYCODE_VOLUME_DOWN 音量键-
- * KEYCODE_VOLUME_MUTE 静音
- * 方向键
- * KEYCODE_DPAD_CENTER
- * KEYCODE_DPAD_UP
- * KEYCODE_DPAD_DOWN
- * KEYCODE_DPAD_LEFT
- * KEYCODE_DPAD_RIGHT
- * 键盘键
- * 数字0~9 字母A~Z
- * KEYCODE_0 ~ KEYCODE_9
- * KEYCODE_A ~ KEYCODE_Z
- * 提供的回调方法有
- * onKeyUp()、OnKeyDown()、onKeyLongPress()
- *
- * @author Administrator
- *
- */
- public class MainActivity extends Activity {
- private Button btnClose = null;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btnClose = (Button) findViewById(R.id.btnClose);
- btnClose.setOnClickListener(new closelistener());
- }
- class closelistener implements OnClickListener {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- finish();
- }
- }
- /**
- * 重写onKeyDown方法可以拦截系统默认的处理
- */
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- // TODO Auto-generated method stub
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- Toast.makeText(this, "后退键", Toast.LENGTH_SHORT).show();
- return true;
- } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
- Toast.makeText(this, "声音+", Toast.LENGTH_SHORT).show();
- return false;
- } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
- Toast.makeText(this, "声音-", Toast.LENGTH_SHORT).show();
- return false;
- } else if (keyCode == KeyEvent.KEYCODE_VOLUME_MUTE) {
- Toast.makeText(this, "静音", Toast.LENGTH_SHORT).show();
- return false;
- } else if (keyCode == KeyEvent.KEYCODE_HOME) {
- Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }
- /**
- * 重写onTouchEvent方法可以处理Touch事件
- */
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- // TODO Auto-generated method stub
- if (event.getAction() == MotionEvent.ACTION_MOVE) {
- Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();
- } else if (event.getAction() == MotionEvent.ACTION_UP) {
- Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();
- } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
- Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();
- }
- return super.onTouchEvent(event);
- }
- }
更多的事件可以参考SDK文档的MotionEvent、KeyEvent两个类,在KeyEvent中如果处理了KeyEvent.KEYCODE_BACK事件,那就不会执行默认的操作,比如收到KeyEvent.KEYCODE_BACK事件后默认是退出,如果直接return那就不会处理退出了。
如下图