老人机launcher 发现按一下数字键第一个icon 会highlight,

老人机launcher 发现按一下数字键第一个icon 会highlight, 而拨号这些功能键则不会,心想应该是launcher哪里处理有问题,在launcher的各个按键处理的地方查找,发现按键处理的地方全都屏蔽掉还是会highlight一下,而highlight处理的地方 FocusIndicatorView.java 的public void onFocusChange(View v, boolean hasFocus) 屏蔽掉则不会highlight了,说明最终是跑的onFocusChange来highlight,很有可能其实这个highlight不是launcher 里处理的,focus有可能是系统处理了按键改变了焦点来触发了这个callback函数,通过onFocusChange函数调用路径的追查,发现问题在framework 下ViewRootImpl.java的 leaveTouchMode 跑到了 checkForLeavingTouchModeAndConsume函数里下面这段代码
        if (isTypingKey(event)) {
            ensureTouchMode(false);
            return false;
        }
isTypingKey的函数定义如下,可以看出来,就是判断输入的按键值是不是Unicode编码字符,这也就解释了为什么数字键会highlight, 而拨号键不会的问题,
    private static boolean isTypingKey(KeyEvent keyEvent) {
        return keyEvent.getUnicodeChar() > 0;
    }

ensureTouchMode(false); 当前界面设置成非touch模式, 因此数字按键按下时,系统就认为由touch模式进入了非touch模式,因此改变了focus, 设置了第一个icon focus, 屏蔽ensureTouchMode(false); 这个果然按键就不会highlight了.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
前言: 或许你觉得现在的老人满大街都是,便宜到白送了。但是所谓的老人不过是按键大点,音量大点而已,操作按键还是那么多。对于一些60岁以上的老人,特别是老太太,可能一辈子也没用过手,打个电话还要叫老伴或者年轻人代劳。 这次介绍的是基于Gboard做的老人,具有一键拨打5个预设号码,可接听,可挂断的功能。制作很简单,先上我DIY的实物效果图。 需要准备的材料有: 老人视频演示: 老人制作说明如下: 将sim卡插入到Gboard背面的sim卡槽,硬件连接如下图所示: 按钮电子积木也是3pin的接口,这里没有画出G 和 V了。使用3pin杜邦线直接连接即可。 需要使用的库解压后放到libraries文件夹下面。如果libraries文件夹里面已经有以前下载过的sim900相关库文件,需要暂时删除或者压缩备份,以免有相同文件名冲突。 打开Arduino IDE软件,将代码复制黏贴到编辑框。 连接foca到电脑,选择board类型为“Arduino Duemilanove w/atmega328”,选择相应的串口。编译烧写。(ATmega328数据手册) 最后使用电源适配器给Gboard供电即可。开自启动sim900模块。其中一个按钮是用来挂断和接听电话的,一键两用。插上麦克风和耳就可以通话了。妈妈再也不用担心不用智能手打电话了! 注意:考虑到5个预设号码太少了,由此我们推出升级版本——附带NFC老人。具体的制作与上文提交的差不多,不懂的可以自己下载附件查看。 所需的材料如下:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值