Android事件机制—-KeyEvent
1、提出问题
1)Android是如何响应对其中的某个视图的操控操作呢?
------>MotionEvent
2)Android是如何响应手机的按键操作呢?
------->KeyEvent
2、按键(KeyEvent)机制
(1)事件类型:
down
up
(2)相关API
.KeyEvent
int ACTION_DOWN = 0;标识down的常亮
int ACTION_UP = 1:标识up的常亮
int getAction():得到事件类型
int getKeyCode():得到按键的keycode(唯一标识)
startTracking():追踪事件,用于长按监听
.Activity
boolean dispatchKeyEvent(KeyEvent event):分发事件
boolean on KeyDown(int keyCode,KeyEvent event):按下按键的回调
boolean onKeyUp(int keyCode,KeyEvent event):松开按键的回调
boolean onKeyLongPress(int keyCode, KeyEvent event):长按键的回调
3、基础的应用案例
连续点击back退出应用(keyEvent事件)
a、handler处理延迟消息
b、keyEvent的处理
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private boolean exit = false;//标识是否可以退出
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what == 1){
exit = false;
}
}
};
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if(event.getKeyCode()==KeyEvent.KEYCODE_BACK){
if(!exit){//如果 exit = false 不退出
exit = true;
Toast.makeText(this,"再按一次退出",Toast.LENGTH_SHORT).show();
handler.sendEmptyMessageDelayed(1,2000);//发送延迟消息
return true;//不退出
}
}
return super.onKeyUp(keyCode, event);
}
}