8.6 虚拟按键的实现

虚拟按键(Virtual Key)是Eclair版本开始增加的新特性。Virtual

Key的功能是利用触摸屏,模拟按键发生的事件,这样就可以利用触摸屏的边缘,实现一些可以自定义的按键效果。

虚拟按键的实现效果如图8-5所示。

图8-5 虚拟按键的实现效果

在Android系统中,触摸屏设备发送的是RawInputEvent(原始输入事件),而按键发送的是KeyEvent(按键事件)。KeyEvent直接发送给应用程序层,RawInputEvent在Android的Java框架中被转换成MotionEvent发送给应用程序层。

在Android系统中虚拟按键的实现方法是:在某种情况下,将RawInputEvent转换成KeyEvent。

frameworks/base/services/Java/com/android/server目录中的InputDevice.Java文件负责处理虚拟按键的主要文件。

虚拟按键的处理相对简单,需要根据以下文件对虚拟按键的内容进行配置:

/sys/board_properties/virtualkeys.{devicename}

在InputDevice.Java文件中通过readVirtualKeys,对进行消息的转化。根据配置文件将RawInputEvent转换成按键相关的内容。

virtualkeys.{devicename}是虚拟按键的适配文件,需要在目标文件系统的/sys/board_

properties/目录中。

虚拟按键配置文件的格式如下所示:

0x1:扫描码:X:Y:W:H:0x1: ……

例如,在MSM的mahimahi平台上查看虚拟按键的配置文件如下所示:

# cat /sys/board_properties/virtualkeys.synaptics-rmi-touchscreen

0x01:158:55:835:90:55:0x01:139:172:835:125:55:

0x01:102:298:835:115:55:0x01:217:412:835:95:55

由此可见,其中定义了4个区域的虚拟按键,它们的Y坐标相同,可见4个按键的矩形区域位于水平的一排。其转换的扫描码分别为158,139,102,217,分别对应于BACK(返回),MENU(菜单),HOME(主界面),SEARCH(搜索)这4个按键。

另外一个系统的虚拟按键的配置文件如下所示:

$ cat /sys/board_properties/virtualkeys.qtouch-touchscreen

0x01:139:90:936:116:104:0x01:102:252:936:

116:104:0x01:158:402:936:116:104

其转换的扫描码分别为:139,102,158,分别对应于MENU(菜单),HOME(主界面),BACK(返回)这3个按键。

提示:使用虚拟按键转换成为的是按键的扫描码,不是按键码,因此依然需要经过按键布局文件的转化才能得到按键码。

android虚拟按键实现,虚拟按键的实现相关推荐

  1. android 隐藏手机底部虚拟按键

    今天,简单讲讲android如何隐藏手机下面的虚拟按键. 其实,自己在做界面适配时,老是发现了华为手机存在适配的问题,主要就是华为手机有一个底部的虚拟按键占用了界面的部分空间,所以在网上搜索了如何隐藏 ...

  2. 关于Android全面屏与虚拟按键适配问题

    随着手机不断更新换代,从物理按键到虚拟按键到全面屏都需要去适配. 1. 最简单的虚拟按键适配: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES. ...

  3. 如何隐藏Android模拟器下方的虚拟按键(隐藏模拟器属性即可)

    如何隐藏Android模拟器下方的虚拟按键(隐藏模拟器属性即可) 在我们做屏幕适配的时候,就务必需要使用模拟器进行适配.但是在编辑的过程中,总是发现令人恶心的黑不溜秋的虚拟按键,很影响我们进行屏幕适配 ...

  4. android 虚拟键盘改变单个按键颜色_这款机械键盘很特别!一亿次按键寿命还有高颜值...

    电脑主机要上RGB,那外设自然不能落下,虽说没有60%性能加成,用炫酷的灯光点亮桌面的感觉也是不错的.德国老牌外设品牌--冰豹(ROCCAT)2018年发布了Vulcan系列机械键盘,凭借着独特的设计 ...

  5. 小米等安卓手机屏蔽实体按键和虚拟按键

    小米手机屏蔽和开启实体按键和虚拟按键 屏蔽实体按键的方法 第一步:同样使用RE文件管理器修改系统状态为读写 第二步:进入system/usr/keylayout目录下 第三步:选择synaptics_ ...

  6. USB转蓝牙hid键鼠按键精灵控制手机虚拟键盘、虚拟触摸等功能

    #USB转蓝牙hid键鼠按键精灵控制手机虚拟键盘.虚拟触摸等功能 提示:目的是为了实现通过电脑控制,达到手机虚拟触摸的功能 简单介绍 提示:开放协议,可再行开发,提供C# python c++ 等开发 ...

  7. android的退格字符,按键安卓版如何实现退格键功能

    我们在使用键盘的时候有两种操作,一种是"按下"键,一种是"弹起"键, 将这两个动作连续进行,就是一个完整的"按键"动作 按键功能 按键名称( ...

  8. 蓝牙耳机按键事件linux,【记录】Android监听蓝牙耳机的按键事件

    Android监听蓝牙耳机的按键事件 一.本文测试环境: 1.使用Dacom M10蓝牙耳机 2.成功监测到"电话键"(音量键没有监测到) 3.参考资料 4.参考源码 二.一些说明 ...

  9. adb 模拟按键,调试按键,android测试可以用

    我们在用adb 调试app时,如果需要模拟按键怎样做呢 (http://blog.csdn.net/sergeycao),可以使用如下的方法 adb shell input keyevent 4 #这 ...

  10. Android 监听Home键按键事件

    Android 监听Home键按键事件 标签(空格分隔):Android Home键 在Android开发中有很多按键事件需要在App中捕获从而做出一些针对性的操作,例如返回键,音量键等都可以直接在d ...

最新文章

  1. linux工程师前景_小猿圈预测2019年Linux云计算发展前景
  2. provide和inject,Vue父组件直接给孙子组件传值
  3. CentOS 7下搭建配置 SVN 服务器
  4. mysql使用DISTINCT进行去重
  5. void 型指针的高阶用法,你掌握了吗?
  6. TIOBE开发语言排行榜
  7. 5月17日 AJAX之JSON
  8. 深度剖析5款主流杀毒软件
  9. Matlab使用for循环实现5阶乘和的计算
  10. 7天快速掌握MySQL-DAY5
  11. Python+Django+MySQL资产管理系统
  12. 提示GuestAdditions versions on your host (6.1.32) and guest (6.1.22) do not match错误的解决方法
  13. 主机安全 服务器windows
  14. python elif是什么意思_python elif是什么意思
  15. [BJOI2019] 排兵布阵(分组背包)
  16. PIC16 F887 单片机 直流电机PWM调速 PID调速 PID算法
  17. redis 高可用(持久化、主从复制、哨兵、集群)以及集群的三种模式
  18. springboot skywalking douyin
  19. Androidq下编译efr32mg21
  20. 西安电子科技大学经济与管理学院861上岸学姐考研经验分享

热门文章

  1. portknocking(端口试探) demo
  2. 如何在ChemDraw中输入℃温度符号
  3. Flink任务失败,检查点失效:Exceeded checkpoint tolerable failure threshold.
  4. MySQL 中 delete where in 语句的子查询限制
  5. HyperV Windows系统端口转发给主机 2021-12-13
  6. 2019.08.12【NOIP提高组】模拟 A 组
  7. [20190727NOIP模拟测试9]单(single) 题解(树上dp)
  8. RISC-V架构能否引领物联网时代?
  9. 安卓开发常用软件及环境配置
  10. this java 错误_java异常错误处理