扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
1、百度输入法:百度输入法是百度公司免费提供的输入软件。2010年10月推出,拥有百度搜索和云端技术的支持,百度输入法很快成为了新一代的输入产品。“世界很复杂,百度更懂你”,其输入法词库多元、输入精准,输入方式多样而著称。
创新互联建站主要从事成都网站制作、成都做网站、外贸营销网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务怀柔,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
2、百度袋鼠输入:袋鼠输入是一款可使手机遥控电脑的泛输入类创新应用。它可以通过手机在电脑端实现语音、手写输入,同时可让手机变为免费无线鼠标、电脑视频遥控器、PPT遥控器、游戏手柄,未来还有更多可能。
3、必应输入法:必应输入法是微软公司首款整合搜索体验的云输入法产品,保留了此前由微软亚洲研究院推出的“英库拼音输入法”的自然语言处理、中文计算、搜索引擎、机器翻译、网络数据挖掘、机器学习等方面的技术优势,同时整合了必应的搜索体验。
4、手心输入法:是一款智能、高效,无广告骚扰,只专注于输入本质的纯粹输入法。手心输入法拥有强大的智能输入引擎、丰富的本地词库、在线词库及精美皮肤在线下载,能够在Windows、Android、IOS与Mac系统上使用。
5、微软拼音输入法:微软拼音输入法是一种基于语句的智能型的拼音输入法,采用拼音作为汉字的录入方式,用户不需要经过专门的学习和培训,就可以方便使用并熟练掌握这种汉字输入技术。
购买安卓平板注意事项
目前安卓平板电脑的尺寸还是比较混乱的,从5寸到10寸都有很多的产品,选择屏幕大小还是根据自己的需求去购买,如果都是在家里用的话,建议购买大尺寸的屏幕,如果经常外出的话,就选择小尺寸的。
平板电脑都是基本都是双核处理器,单核已不多见了,在2012MWC大会上各厂商、包括国内的中兴、华为都纷纷推出了自己的四核处理器平板电脑,由于四核的价格较高,所以主流的依然是双核处理器,有苹果Ax处理器、NVIDIA Tegra2处理器、intel ATOM处理器和ARM处理器几大类。
为了引出下面遇到的问题,提一下密码框删除的思路
删除细节:已输入密码删除移动焦点 ,和无输入内容时移动焦点
密码删除思路:拦截 DELETE 事件,清除输入框并取消焦点,让前一个输入框获取焦点。
测试妹子在使用华为P10 测试到这里的时候,发现删除键没用,她以为手机坏了。因为其他手机包括华为P9都可以响应删除并前移焦点。
开发手机我用的搜狗键盘没有问题,我切换回原生键盘再测发现——我勒个皮皮虾,毛反应都没有。测试妹子发现不是手机坏的,一个眼神光波差点把我炸到五米外。
这种奇葩坑必须深度挖一挖,不然还会被他的同类绊倒
设备:华为 ALT-TL00 5.0.1
因为这里是纯数字密码,设置属性 inputType 值为 numberPassword 。
测试日志发现,发现 ACTION_DOWN 、 ACTION_DOWN 、 DELETE 都没有获取到。
为了去除意外,我又测试了不设置 inputType ,果不其然全GG。
此时我真的感觉到了蛋疼 FUCK! 这是个锤子手机,心里默默吐槽了开发这个键盘的程序员兄弟。
翻了一下老司机的博客,和国外论坛。发现还有非常普遍的bug
在输入框,没有内容时不会传递 DELETE 相关事件
而我测试发现,这个华为手机上。无论输入框有无内容都没有传递出 DELETE 事件。
1.自定义开发一个键盘,这样就不用再测试其他机型或者其他厂牌的输入法。统一解决了这个问题。简单暴力,还可以附加密码输入安全策略。
但是项目已经快到尾声了,全局需要替换密码键盘。还要跟在国外的开发小伙伴沟通。
站在这两点上,项目经理否定了。让我先针对性的解决一下。
于是就有了下面的解决办法。
2.着手 EditText 对键盘事件的关联使用,覆盖事件监听接口为我们自定义的,只传递需要的 ACTION_DOWN 和 DELETE 事件。
这里我就不贴源码分析了,因为用到的方法只有两个,接口名字也是一读就懂。有兴趣的小伙伴可以去翻阅源码。
参考博客: Android 获取软键盘的删除delete事件
基于Android9.x
Window和Session创建成功后,窗口的下一步流程为获取焦点
我们看下焦点获取过程,跟输入法相关的流程
两个Activity切换时,对应的状态变化过程为:
以下是Activity窗口初次获取焦点的流程
当两个activity 切换时,失去焦点的窗口调用过程如下:
对应的,获取焦点的额窗口的调用过程如下:
当B窗口的状态切换到RESUMED时,当窗口的focus可能变化时,会调用updateFocusedWindowLocked
在该方法中,判断,如果还没有执行startInputInner方法,则执行startInputInner方法,否则,直接执行startInputOrWindowGainedFocus方法
主要流程:
1:设置controlFlags的flag为CONTROL_WINDOW_FIRST
2:检查是否已经执行过startInputInner,没有的话执行startInputInner--startInputOrWindowGainedFocus;否则,直接执行startInputOrWindowGainedFocus
两条路径,携带的startInputReason参数不一样
主要流程:
1:检查要启动和退出的ServedView是否为同一个,如果为同一个,则表示已经执行过startInputInner,则返回false,表示不再执行startInputInner
2:如果获取焦点的是EditorText,会创建跟IMS通信的mServedInputConnectionWrapper对象
主要流程:
1:创建EditorInfo对象tba,这个参数对TextView布局才有意义,它的初始化是在mServedView的onCreateInputConnection完成实例化的
2:根据EditorInfo创建一个InputConnection对象,输入法应用通过该对象,完成输入内容到输入框的传递;ACTIVITY获取焦点场景,该对象
为null,因为没有要输入的对象
startInputOrWindowGainedFocus携带的参数
startInputReason = 1
表示,该流程是窗口获取焦点过程
mClient
应用层创建的IInputMethodClient对象,为服务层提供应用层的各个回调方法
该方法跟应用进程首次创建时Session时,传递到IMMS的对象是同一个对象
windowGainingFocus:
应用层的ViewRootImpl$W对象
controlFlags |= CONTROL_START_INITIAL;
表示window窗口刚开始获取焦点
softInputMode = SOFT_INPUT_ADJUST_RESIZE , 允许调整输入法窗口,避免被其他窗口遮挡
tba , EditorInfo对象
servedContext
null
missingMethodFlags
ic等于null的情况下,为0
当应用层传递的W对象windowToken不为null的时候,则创建windowGainedFocus对象,返回给app
结果返回后,会对IMM的对象进行赋值
如此,进入一个窗口,获取窗口焦点过程,窗口与输入法相关的流程,就结束了。
下一篇:输入法在输入框弹出流程
Android输入法(3),弹出流程
Android手机可以安装多个输入法,并且方便的进行切换,这样可以适合各自的使用。
具体的安装和切换方法为:
1.首先下载安装包,然后解压后存放在内存卡中,然后点击安装。
2.安装完成后,我们在桌面按menu键,选择settings(设置)-LocaleText(区域和文本),这里有设置选项,根据自己的需要进行选择。
3.打开短信,在输入时按住输入框,会弹出选择输入法的对话框。
这样就可以很方便的对Android手机输入法进行切换了,目前使用较多的就是谷歌输入法和HTC输入法。
安卓手机先设置里对自己想用的输入法打钩,再在输入的地方长按住屏幕不放。即可。ok
参考:百度资料
若使用的是vivo手机,可以进入设置--系统管理/更多设置--输入法--默认输入法--切换至想要设置的输入法即可。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流