Android惯用的物理按键及其触发事件
Android常用的物理按键及其触发事件
Activity和View都能接收触摸和按键,如果响应事件只需要在继承类里复写事件函数即可;当一个视图(如一个按钮)被触摸时,该对象上的 onTouchEvent() 方法会被调用。不过,为了侦听这个事件,你必须扩展这个类并重写该方法,当一些物理按钮被按下时会调用onKeyDown()方法;
常见的按键消息和触摸消息
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那就不会处理退出了。
如下图
示例代码
点击打开链接