android标准键盘是有 HOME,MENU,BACK,SEARCH等,但是同时要保持工业设计。nexus one没有用普通按键用触摸屏实现,
显示屏是800X480,但是在电容触摸屏是8xx*480的就是比800要大的地方就变成了虚拟按键,模拟了android标准按键。
1方案
要实现虚拟按键,在android里面是靠两层协助实现,底层要把虚拟按键在比显示屏多出的地方规定好虚拟按键的位置大小以及键值等,给上层
一文件接口。上层java层启动一个服务来读取这一区域的按键响应,这样就是大体的架构。具体实现如下:
1.1 底层虚拟按键功能实现方案
简而言之,就是在内核中把虚拟按键的所有信息通过sys文件系统的方式给上层,sys文件系统的路径是约定好的所以代码如下实现。给出信息的
协议格式是一段连续的字符串,每个按键有六项分别用冒号分割,按键按键之间也是用冒号分割,六项按顺序分别是:
键类型:键值:按键区域中心x坐标:按键区域中心y坐标:按键区域宽:按键区域高
arch/arm/mach-msm/board-mahimahi.c
static ssize_t mahimahi_virtual_keys_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { if (system_rev > 2) { /* center: x: back: 55, menu: 172, home: 298, search 412, y: 835 */ return sprintf(buf, __stringify(EV_KEY) ":" __stringify(KEY_BACK) ":55:835:90:55" ":" __stringify(EV_KEY) ":" __stringify(KEY_MENU) ":172:835:125:55" ":" __stringify(EV_KEY) ":" __stringify(KEY_HOME) ":298:835:115:55" ":" __stringify(EV_KEY) ":" __stringify(KEY_SEARCH) ":412:835:95:55" "/n"); } else { /* center: x: home: 55, menu: 185, back: 305, search 425, y: 835 */ return sprintf(buf, __stringify(EV_KEY) ":" __stringify(KEY_HOME) ":55:835:70:55" ":" __stringify(EV_KEY) ":" __stringify(KEY_MENU) ":185:835:100:55" ":" __stringify(EV_KEY) ":" __stringify(KEY_BACK) ":305:835:70:55" ":" __stringify(EV_KEY) ":" __stringify(KEY_SEARCH) ":425:835:70:55" "/n"); } } static struct kobj_attribute mahimahi_virtual_keys_attr = { .attr = { .name = "virtualkeys.synaptics-rmi-touchscreen", .mode = S_IRUGO, }, .show = &mahimahi_virtual_keys_show, }; static struct attribute *mahimahi_properties_attrs[] = { &mahimahi_virtual_keys_attr.attr, NULL }; static struct attribute_group mahimahi_properties_attr_group = { .attrs = mahimahi_properties_attrs, }; struct kobject *properties_kobj; properties_kobj = kobject_create_and_add("board_properties", NULL); if (properties_kobj) ret = sysfs_create_group(properties_kobj, &mahimahi_properties_attr_group); if (!properties_kobj || ret) pr_err("failed to create board_properties/n");
在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 虚拟按键适配动态调整布局的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
非Root环境下安卓实现全屏,屏蔽下方虚拟...用户调出下方Android虚拟按键后,分别屏蔽: 2、禁止左边应用列表按键。 3、禁止右边回退按键。 原文链接:https://blog.csdn.net/a2831942318/article/details/122015557
今天小编就为大家分享一篇解决Android 虚拟按键遮住了页面内容的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
实现大部分按键,适合android远程控制,特别是机顶盒
Android 解决沉浸式状态栏和华为虚拟按键冲突问题,
今天小编就为大家分享一篇Android 虚拟按键与沉浸式的适配方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
隐藏虚拟按键: 添加一个小按钮控制虚拟按键的隐藏和显示,在虚拟按键添加音量控制也是如此!
今天小编就为大家分享一篇Android适配底部虚拟按键的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Android平台替代虚拟按键悬浮球,参考魅族悬浮球设计.zip [注意:本资源来自网络,如有侵权,请联系我删除,谢谢。]
今天小编就为大家分享一篇Android dialog 去除虚拟按键的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
android 适配底部虚拟按键,屏幕处于全屏状态下,处理页面的展示。
Android键盘键名和键值列表 Android虚拟键码表Android键盘键名和键值列表 Android虚拟键码表Android键盘键名和键值列表 Android虚拟键码表Android键盘键名和键值列表 Android虚拟键码表Android键盘键名和键值列表 ...
小Demo 里面有关于自己手机的屏幕分辨率,包含虚拟按键的,方便手机进行屏幕适配
这个真的经典,值得下载,Android的好资源!
安卓7.0 SystemUI 虚拟键Navigationbar动态显示和隐藏的功能,以及添加自定义的按键,音量加减,隐藏键的补丁
本文通过实例代码给大家讲解了Android 隐藏底部虚拟键的两种方法,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧