为什么80%的码农都做不了架构师?>>>   

前段时间在做的输入法唤起的时候原来的Activity整体被挤上去, 而且输入法界面和Activity中间还有很大一片黑色区域, 根本不知道从哪里出来的。 注意这个问题目前只有微信朋友圈编写评论的时候才出现, 微信聊天窗口的问题恰恰相反,聊天窗口中输入法窗口把微信的输入框给覆盖了一点。

先上个图

这两天为了这个问题各种百度,各种谷歌, 各种github没有找到遇到过跟我一样的童鞋, 后来看了一下Android系统源代码找到了解决问题的入口, 然后做了一些反射测试。

自己的InputMethodService 里先获取了父类的几个成员变量mRootView,mTmpInsets和mWindow。 这几个变量根本没有问题, 数据都是很正确的。 后来看了WindowManager计算窗口大小的算法后找到了InputMethodService的mInsetsComputer成员变量, 刚才的mTmpInsets 就在这个对象中赋值的, 现在来看看他的代码:

final ViewTreeObserver.OnComputeInternalInsetsListener mInsetsComputer =new ViewTreeObserver.OnComputeInternalInsetsListener() {public void onComputeInternalInsets(ViewTreeObserver.InternalInsetsInfo info) {if (isExtractViewShown()) {// In true fullscreen mode, we just say the window isn't covering// any content so we don't impact whatever is behind.View decor = getWindow().getWindow().getDecorView();info.contentInsets.top = info.visibleInsets.top= decor.getHeight();info.touchableRegion.setEmpty();info.setTouchableInsets(ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME);} else {onComputeInsets(mTmpInsets);info.contentInsets.top = mTmpInsets.contentTopInsets;info.visibleInsets.top = mTmpInsets.visibleTopInsets;info.touchableRegion.set(mTmpInsets.touchableRegion);info.setTouchableInsets(mTmpInsets.touchableInsets);}}};

加了断点各种测试后发现原来在onComputeInsets这个方法里计算insets的时候计算出来的contentTopInsets和visibleTopInsets这两个值不相同的时候才会出现以上的问题, 因为我的CandidatesView一直会显示所以我的输入法的这两个值根本不会出现相同的, 但是按原理来说这两个问题不相同也不能出现这个问题的,Android系统新系统里我没有试过这个问题, 但是在我的手机上和别的几个手机上都有这个问题。 好了先把这个问题算个系统Bug好了。

接下来我把 InputMethodService 的onComputeInsets方法给重写了, 把那两个值都写成一样的了, 因为我的CandidatesView一直会显示所以根本不用考虑candidatesView隐藏时的情况。 所以你也遇到我这样的问题的时候要考虑自己的情况再写

好了先写到这里吧,  如果我这个方案有啥问题可以提出来。

转载于:https://my.oschina.net/quttap/blog/3033449

解决Android 输入法InputMethodService 显示时让原Activity大小计算错误问题相关推荐

  1. android 输入法的显示和隐藏

    Android输入法的显示和隐藏方法 今天上午一直纠结于一个动画效果后EditText输入法无法弹出的问题,现在终于解决,解决方法是这样的 1.为EditText添加click事件 2.click事件 ...

  2. 解决 android 输入法弹出输入框被遮挡的问题

    解决 android 输入法弹出输入框被遮挡的问题 由于本人懒,也从不写博客,之所以写是因为这次开发 '又遇到' 输入法这个问题了,好久以前有遇到过,突然发现还是很有必要把他分享出来,言归正传,下面就 ...

  3. 如何解决android 通知栏不显示的问题

    如何解决android 通知栏不显示的问题 参考文章: (1)如何解决android 通知栏不显示的问题 (2)https://www.cnblogs.com/haloujava/p/11376290 ...

  4. android输入法隐藏状态栏,android 输入法设置显示隐藏

    Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入. 那么,弹出软键盘后必然会造成原有布局高度的减少,那么系统应该如何来处理布局的减少?我们能否 ...

  5. Android输入法弹出时覆盖输入框问题

    本文来自网易云社区 作者:孙有军 当一个activity中含有输入框时,我们点击输入框,会弹出输入法界面,整个界面的变化效果与manifest中对应设置的android:windowSoftInput ...

  6. 解决Android Studio 安装APK时device support,but apk only supports armeabi-v7 问题

    报错信息: Android Studio 安装APK时出现 device support,but apk only supports armeabi-v7 问题出现原因: 这两天入职了新公司,公司统一 ...

  7. Android Toast 自定义显示时长

    Android Toast 只支持两种时间 LENGTH_SHORT 2 秒,LENGTH_LONG 3.5 秒,但是有场景需要自定义显示时长就会有问题,所以需要自定义实现,下边是自定义的类,通过定时 ...

  8. android弹出输入框不影响布局,android 输入法弹出后,不影响activity原有布局

    android输入法弹出框有时会遮挡原有的布局,使得输入法弹出框弹出时,原布局消失,现介绍android:windowSoftInputMode的一些属性: 在AndroidManifest.xml文 ...

  9. 解决Android 启动模拟器是出现“Failed to allocate memory: 8”错误提示

    Android 启动模拟器是出现" Failed to allocate memory: 8"错误,模拟器无法启动,如下: [2012-11-26 13:40:12 - TestS ...

最新文章

  1. 使用Native API 创建进程
  2. 谈谈Java中的volatile
  3. Java assertion 介绍和用法
  4. loadrunner编写脚本常用策略,用以记录,看的懂的拿走,看不懂说明与你有缘无份...
  5. 数据库---查询(详细)
  6. 详解GPU技术关键参数和应用场景
  7. html5简介、选项输入框、表单元素分组、input新增属性及属性值
  8. 第二十三讲:访问者模式
  9. 云HBase内核解析
  10. Android Device Chooser中显示Target unknown解决方法
  11. 收藏 | NLP论文、代码、博客、视频资源(LSTM,指针模型,Attention, ELMo,GPT,BERT、多任务学习等)...
  12. 找到一个好用的在线创意英文logo设计生成器网站
  13. matlab 冒泡排序函数,MATLAB实现冒泡排序算法
  14. 英文c语言笔试题,2010年3月计算机等考二级C语言笔试试题 附答案(国外英文资料).doc...
  15. 搭建sql注入平台及DVWA漏洞环境
  16. php开启sockets模块,wdlinux 增加php的sockets模块
  17. Python 机器学习 | 超参数优化 黑盒(Black-Box)非凸优化技术实践
  18. 2015年3季度基金持股超流通股30%的个股一览
  19. 接口能通但是没有数据_直接用大脑联网刷微博看电影看小说!脑机接口最新专利详解...
  20. DirectX入门之初始化Direct3D及常见问题

热门文章

  1. Anaconda+tensorflow+keras的下载与安装
  2. SpringBoot指南(二)——常用注解及操作
  3. 【差分约束】POJ3159/LG P1993 小K的农场
  4. LeetCode刷题(39)--Set Matrix Zeros
  5. python项目软件代码_七套Python库快速提升您项目的代码可维护性,软件工程,代码库...
  6. redis 一般启动几个 哨兵_redis哨兵机制讲解
  7. mysql binlog-row-image=minimal_十一:参数binlog_row_image(笔记)
  8. 卸载 Visual Studio 2005步骤
  9. 普联技术java工程师_【普联技术(TP-LINK)工资】java开发工程师待遇-看准网
  10. 事业单位计算机知识c语言,事业单位考试计算机基础知识C语言程序设计