《Android内核剖析》笔记 第13章 View的按键消息处理,跨平台移动开发答案

本文详细介绍了Android中View的按键消息处理流程,从handleMotion和dispatchKey函数开始,深入到deliverKeyEvent的执行,包括输入法拦截、预处理和后处理。文中提及了dispatchKeyEvent在Activity和ViewGroup中的分发机制,以及如何在不同层级处理按键事件。
摘要由CSDN通过智能技术生成
  1. public void handleMotion(MotionEvent event, InputQueue.FinishedCallback finishedCallback) {

  2. startInputEvent(finishedCallback);

  3. dispatchMotion(event, true);

  4. }

  5. };

dispatchKey()函数内部发送一个DISPATCH_KEY消息,消息的处理函数为deliverKeyEvent():

[java]  view plain copy

  1. private void dispatchKey(KeyEvent event, boolean sendDone) {

  2. //noinspection ConstantConditions

  3. if (false && event.getAction() == KeyEvent.ACTION_DOWN) {

  4. if (event.getKeyCode() == KeyEvent.KEYCODE_CAMERA) {

  5. if (DBG) Log.d(“keydisp”, “===================================================”);

  6. if (DBG) Log.d(“keydisp”, “Focused view Hierarchy is:”);

  7. debug();

  8. if (DBG) Log.d(“keydisp”, “===================================================”);

  9. }

  10. }

  11. Message msg = obtainMessage(DISPATCH_KEY);

  12. msg.obj = event;

  13. msg.arg1 = sendDone ? 1 : 0;

  14. if (LOCAL_LOGV) Log.v(

  15. TAG, "sending key " + event + " to " + mView);

  16. enqueueInputEvent(msg, event.getEventTime());

  17. }

  18. @Override

  19. public void handleMessage(Message msg) {

  20. switch (msg.what) {

  21. case FINISHED_EVENT:

  22. handleFinishedEvent(msg.arg1, msg.arg2 != 0);

  23. break;

  24. case DISPATCH_KEY:

  25. deliverKeyEvent((KeyEvent)msg.obj, msg.arg1 != 0);

  26. break;

  27. case DISPATCH_POINTER:

  28. deliverPointerEvent((MotionEvent) msg.obj, msg.arg1 !&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值