Android webkit keyevent 事件传递过程
前言:基于android webview 上定制自己使用的可移植浏览器apk,遇到好多按键处理的问题。所以索性研究了一下keyevent 事件的传递流程。
frameworks 层
keyevent 事件开始是从/frameworks/base/core/java/android/webkit目录下WebViewClassic.java
中的onKeyDown() 函数开始的
// Bubble up the key event if
// 1. it is a system key; or
// 2. the host application wants to handle it;
if ((event.isSystem() || mCallbackProxy.uiOverrideKeyEvent(event))
这个的作用是判断event是不是系统按键,或者调用webview应用处理event。系统按键直接返回,
如果webview应用处理了也直接返回。
其它key事件调用 sendKeyEvent(event),在sendKeyEvent() 又调用sendBatchableInputMessage()
在这个函数中又调用mWebViewCore.sendMessage(message)
将event封装成Message传递给WebViewCore.java中的EventHub 类
在sendMessage()函数又通过它发送到Handler在transferMessages() 中handleMessage()处理keydown事件
case KEY_DOWN:
key((KeyEvent) msg.obj, msg.arg1, true);
break;
webkit 层
key中调用nativeKey() 将事件传入webkit中Source/WebKit/android/jni WebViewCore.cpp中的
{ "nativeKey", "(IIIIZZZZ)Z",
(void*) Key },
WebViewCore::key(const PlatformKeyboardEvent& event)
eventHandler->keyEvent(event);
此时调用进入Source/WebCore/page 中的EventHandler.cpp
它会区分为keyup keydown keypress 事件发送到Node中处理
bool Node::dispatchEvent(PassRefPtr<Event> event)
{
return EventDispatcher::dispatchEvent(this, EventDispatchMediator(event)); }
通过中转最终调用到EventDispatcher.cpp中
bool EventDispatcher::dispatchEvent(PassRefPtr<Event> event)
m_node->handleLocalEvents(event.get());
在Node.cpp 中调用
fireEventListeners(event);
class Node : public EventTarget Node继承了EventTarget
EventTarget.cpp中实现注册监听
bool EventTarget::fireEventListeners(Event* event)
registeredListener.listener->handleEvent(scriptExecutionContext(), event);
发送到注册监听的javascript中。
如果在js中注册了一个keypress事件处理而我们要兼容支持它我们可以只动WebViewClassic.java或者在app层代码实现转换并传入js中即可。
在WebViewClassic.java中实现了passVirtualKeyEvent(int KeyCode)。
如有问题和需要请留言,我会为您解答问题。
扫一扫下方二维码或搜索微信号程序员互动联盟(coder_online)即可关注,我们可以在线交流
Android webkit keyevent 事件传递过程的更多相关文章
- Android 手机卫士--事件传递&响应规则
问题的提出: 本文地址:http://www.cnblogs.com/wuyudong/p/5911187.html ,转载请注明源地址. 前面的文章实现了点击SettingItemView条目的时候 ...
- android中的事件传递和处理机制
一直以来,都被android中的事件传递和处理机制深深的困扰!今天特意来好好的探讨一下.现在的感觉是,只要你理解到位,其实事件的 传递和处理机制并没有想象中的那么难.总之,不要自己打击自己,要相信自己 ...
- Android的View 事件传递
欢迎转载,请附出处: http://blog.csdn.net/as02446418/article/details/47422891 1.基础知识 (1) 全部 Touch 事件都被封装成了 Mot ...
- View的绘制、事件传递过程
View绘制过程 onMeasure() onLayout() onDraw() 过程详解 onMeasure() 计算尺寸 onLayout() 为viewGroup类型布局子视图用的. onDra ...
- iOS中事件传递过程
iOS中,UIApplication管理着一个事件的队列,当系统获取用户的点击或滑动等事件后,就会将这些事件按顺序插入UIApplication管理的这个队里中,UIApplication再从这个队列 ...
- Android中的事件传递机制
Android源码版本:API Level 19(Android 4.4) Android事件构成 在Android中,事件主要包括点按.长按.拖拽.滑动等,点按又包括单击和双击,另外还包括单指操作和 ...
- qt事件传递过程和处理
处理监控系统的时候遇到问题,在MainWidget中创建多个子Widget的时候,原意是想鼠标点击先让MainWidget截获处理后再分派给子Widget去处理,但调试后发现如果子Widget重新实现 ...
- Android touch 事件传递机制
前言: (1)在自定义view的时候经常会遇到事件拦截处理,比如在侧滑菜单的时候,我们希望在侧滑菜单里面有listview控件,但是我们希望既能左右滑动又能上下滑动,这个时候就需要对触摸的touch事 ...
- Android事件机制之一:事件传递和消费
http://www.cnblogs.com/lwbqqyumidi/p/3500997.html 关于Android中的事件机制,用到的地方还是很多的,并且这个知识点还真有点复杂. 在写这篇文章前, ...
随机推荐
- 一个小demo熟悉Spring Boot 和 thymeleaf 的基本使用
目录 介绍 零.项目素材 一. 创建 Spring Boot 项目 二.定制首页 1.修改 pom.xml 2.引入相应的本地 css.js 文件 3.编辑 login.html 4.处理对 logi ...
- 个人总结的常用java,anroid网站
http://blog.csdn.net/wanghao200906/article/details/49334987
- <SpringMvc>入门三 参数绑定
1.get请求 <%--请求参数的绑定--%> <%--get请求参数--%> <a href="/param/testParam1?username=tom& ...
- java导出word的6种方式(转发)
来自: http://www.cnblogs.com/lcngu/p/5247179.html 最近做的项目,需要将一些信息导出到word中.在网上找了好多解决方案,现在将这几天的总结分享一下. 目前 ...
- CCF201703-1 分蛋糕 java(100分)
试题编号: 201703-1 试题名称: 分蛋糕 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别 ...
- python爬虫21 | 对于b站这样的滑动验证码,不好意思,照样自动识别
今天 要来说说滑动验证码了 大家应该都很熟悉 点击滑块然后移动到图片缺口进行验证 现在越来越多的网站使用这样的验证方式 为的是增加验证码识别的难度 那么 对于这种验证码 应该怎么破呢 接下来就是 学习 ...
- circumferential averaged streamwise velocity in ParaView
Goal: get a averaged axial velocity in a circular loop (dashed line in the following figure) Steps: ...
- 解决CUDA程序的黑屏恢复问题
本文引用自 http://blog.163.com/yuhua_kui/blog/static/9679964420146183211348/ 问题描述: 在运行CUDA程序时,出现黑屏,过一会儿 ...
- hihocoder 1032 最长回文子串(Manacher)
传送门 #include<queue> #include<cmath> #include<cstdio> #include<cstring> #incl ...
- A - Restaurant
UVA 1468 Description Mr. Kim is planning to open a new restaurant. His city is laid out as a grid ...