【PR系列之002-1104959】Google输入法建议词列表PopupWindow遮挡输入词,建议词列表PopupWindow无法上下滑动
来源:互联网 发布:告白墙源码 编辑:程序博客网 时间:2024/06/06 16:29
问题描述:
1、在输入任意错误单词,按空格,点击输入词下方的红线(或者长按输入词,点击replace),弹出PopupWindow建议词列表,此时输入词被PopupWindow遮挡。
2、上面所描述的问题在一般情况下是正常的,只有当【输入词太靠手机屏幕下方】或者【改变系统字体大小】时,由于输入词下方的高度无法容纳PopupWindow,导致输入词被遮挡。
解决思路:PopupWindow中字体会随着系统字体大小变动,如此PW的尺寸也会随着变动,所以为了能保持PW在输入词下方,有以下几种解决方案:
1、修改PW尺寸,使其始终小于输入词下方的高度,并使其可以上下滑动。
2、能否让PW显示在输入词以上呢?【这个是我YY的,Google比较强势,只想让她在下面 0_0】。
对于尺寸的修改,修改到多少合适,解决方法各有不同,我的方法是让它的高度=屏幕整体高度-输入词以上的高度,此解决方案会导致一个无伤大雅的小问题,就是当输入词在屏幕顶端时,PW的尺寸太~~~长~~~~ 嗯,就是太长,,PW下面有一部分是空白的,不美丽! 但是总比遮挡了好啊不是么……【最下方有补充】
franemwoks/base/core/java/android/widget/Editor.java
首先定义一个获取系统字体大小的方法:
import java.lang.reflect.InvocationTargetException;
private float getSystemFontScale() { Configuration mCurConfig = new Configuration(); try { // 获取ActivityManagerNative类的对象activityManagerNative Class<?> activityManagerNative = Class .forName("android.app.ActivityManagerNative"); /* * 获得可调用getConfiguration方法的对象oam(调用getDefault方法得到的东西) * getMethod:获取AMN类中的getDefault方法 * invoke:通过activityManagerNative对象调用getDefault方法 */ Object oam = activityManagerNative.getMethod("getDefault") .invoke(activityManagerNative); // 获取getConfiguration方法并通过oam对象调用,得到config对象 Object config = oam.getClass().getMethod("getConfiguration") .invoke(oam); mCurConfig.updateFrom((Configuration) config);// return mCurConfig.fontScale; } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } return mCurConfig.fontScale; }
在class PinnedPopupWindow中更新PW尺寸
mPopupWindow.update(positionX, positionY, -1, mTextView .getResources().getDisplayMetrics().heightPixels - positionY - 30);//减30是为了留点空隙……
在clipVertically(int positionY)中判断系统字体大小,return positionY
if (getSystemFontScale() == 1.15f || getSystemFontScale() == 1.3f) { Log.d("ran.zhou", "Line 2670, Size = " + getSystemFontScale() + ", positionY = " + positionY); return positionY; }
PW滑动的问题,经测试只要变动PW尺寸后就可以了,不过我没有深究,应该是有个地方写好了的,,
此PR原本问题的原因是之前为了解决不能完全显示完PW内容并且无法滑动的问题,修改了clipVertically(int positionY)的return方法,
return Math.min(positionY, displayMetrics.heightPixels - height - 60);
此处-60是不科学的,应该把-60去掉,然后利用文中的方法解决。
更改字体大小会导致PW覆盖输入词的问题,估计Google没有注意到,测试几个机型都存在这个问题,包括我的Nexus5.
20160613更新
以上方法修改后,会导致复制粘贴的弹出窗下方有很长一段空白,代码修改如下:
mPopupWindow.update(positionX, positionY, -1, mTextView .getResources().getDisplayMetrics().heightPixels - positionY - 30);以上代码改成:
int temp = mTextView.getResources().getDisplayMetrics().heightPixels - positionY; if (this instanceof SuggestionsPopupWindow && (temp < 622)) { // [BUGFIX]-Add by TCTSH, 2015-11-17,PR-1104959 and PR-885290 Begin mPopupWindow.update(positionX, positionY, -1, temp - 20); // [BUGFIX]-Add by TCTSH, 2015-11-17,PR-1104959 and PR-885290 End }
- 【PR系列之002-1104959】Google输入法建议词列表PopupWindow遮挡输入词,建议词列表PopupWindow无法上下滑动
- popupWindow被输入法遮挡
- Android 下拉列表之PopupWindow
- Android 下拉列表之PopupWindow
- PopupWindow中输入框与输入法冲突问题(PopupWindow输入框被遮挡)
- Android 下拉列表Popupwindow
- Android-多级列表-popupWindow
- PopupWindow 弹出式列表选择
- PopupWindow下拉列表
- android之popupwindow显示文件列表
- Android 之PopupWindow弹出下拉列表
- Android 之PopupWindow弹出下拉列表
- jquery 实现输入字符给出建议列表&实现上下键切换选项
- PopupWindow 里边有输入框,输入法弹出将其遮挡解决方法
- 封装有输入框的 PopupWindow,并解决输入法弹出将其遮挡问题
- 用PopupWindow实现下拉列表
- Android自定义下拉列表PopupWindow
- PopupWindow制作Spinner下拉列表
- 关于redis、memcache、mongoDB 的对比
- android5.0应用显示安装未完成问题解决方案
- UVA 11997 - K最小的金额 (DP&转换&&优先队列) 好题
- linux管道pipe
- iOS页面间的几种传值方式
- 【PR系列之002-1104959】Google输入法建议词列表PopupWindow遮挡输入词,建议词列表PopupWindow无法上下滑动
- js 等待几秒 每隔几秒 执行
- 多媒体切片与http协议传输
- IOS学习之CocoaPods使用详细说明(相当于Maven搭建环境导入统一管理的jar包)
- Android 弹无虚发之第四弹:你应该掌握的Notification(Notification的通知栏常驻、Notification的各种样式、Notification点击无效)
- 框架搭建-SSI搭建步骤详解版本二
- 经典SQL语句大全
- 程序员的自我修养
- 慕课网 mysql