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那就不会处理退出了。

如下图



示例代码

点击打开链接







 

posted @ 2013-09-30 22:39  pangbangb  阅读(2655)  评论(0编辑  收藏  举报