AndroidBug5497Workaround 修改
公司要使用app,所以学习了一下android app的开发。
目的就是把html内容给展示出来而已,使用webview来呈现html内容。
可是,在点击输入框时,软键盘会遮挡输入框的内容。
可是自己无论怎么调都不成功,如果网页放入chrome浏览器中又可以。
去网上找了好多教程,说是android的一个bug,历史还很久远google还不想解决,所以得自己解决。
教程说让加载AndroidBug5497Workaround类,
在webview所在的activity的
onCreate方法里的
setContentView()后调用AndroidBug5497Workaround.assistActivity(this);这个方法。
调用了之后,是可以看见输入框了,但是又出现了一个问题。
因为html太长了,在webview中会滚动,但是调用了AndroidBug5497Workaround.assistActivity(this);这个方法之后不能出现滚动了。
滚动的原因是webview的高度太短,装不下html,所以才出现滚动。
看了这个类,他的功能就是监听键盘弹起回收的事件,通过这两个事件来影响webview的高度。
frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
这段代码是键盘弹起后设置的webview的高度,具体这个方法是干什么的我不知道,我就知道我的webview的高度会通过这个函数变短。
问题出在变回来的时候的高度上。
frameLayoutParams.height = usableHeightSansKeyboard;
就是上面这个高度,他会变成手机屏幕分辨率的高度Nexus 5X是1920
但是webview没那么高。所以我首先获取了这个webview原始的高度,等软键盘弹回来的时候,设置会webview原始的高度即可。
设置变量用来存储webview的初始高度
private int initheight;
因为初始化我获得的webview的高度为0,所以我直接把下面这段代码仍在监听方法里面
int tempheight=mChildOfContent.getHeight();
if(initheight<tempheight)
{
initheight=tempheight;
}
因为初始化的时候initheight为0,所以一开始监听,mChildOfContent.getHeight();所获得的就是webview的高,设置之后,在软键盘回收的代码中替换为
//frameLayoutParams.height = usableHeightSansKeyboard;
frameLayoutParams.height = initheight;
就大功告成了
修改后的AndroidBug5497Workaround
public class AndroidBug5497Workaround {public static void assistActivity(Activity activity) {new AndroidBug5497Workaround(activity);}private View mChildOfContent;private int usableHeightPrevious;private FrameLayout.LayoutParams frameLayoutParams;private int initheight;private AndroidBug5497Workaround(Activity activity) {FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);mChildOfContent = content.getChildAt(0);mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {public void onGlobalLayout() {possiblyResizeChildOfContent();}});frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();}private void possiblyResizeChildOfContent() {int tempheight=mChildOfContent.getHeight();if(initheight<tempheight){initheight=tempheight;}int usableHeightNow = computeUsableHeight();if (usableHeightNow != usableHeightPrevious) {int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();int heightDifference = usableHeightSansKeyboard - usableHeightNow;if (heightDifference > (usableHeightSansKeyboard/4 )) {frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;} else {frameLayoutParams.height = initheight;}mChildOfContent.requestLayout();usableHeightPrevious = usableHeightNow;}}private int computeUsableHeight() {Rect r = new Rect();mChildOfContent.getWindowVisibleDisplayFrame(r);return (r.bottom-r.top);}}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7f770a53f2.css" rel="stylesheet"></div>
转自:https://blog.csdn.net/tlxfif/article/details/77977471
AndroidBug5497Workaround 修改相关推荐
- android webview监听软键盘弹出和隐藏来修改虚拟导航栏颜色
最近项目中用到了webview,然后里面有输入框,当我们点击输入框的时候,软键盘挡住了布局,这就尴尬了,并且产品说,只有在软键盘弹出的时候底部的虚拟导航栏为黑色,软键盘隐藏的时候虚拟导航栏应该也隐藏. ...
- mysql并发更新数据,多用户并发修改数据解决方案。
mysql并发更新数据,多用户并发修改数据解决方案. 在系统中,有一些如余额.资产.积分的数据,是要保证数据一致性的.如,一个人使用两个设备同时进行消费操作,如何保证数据一致性的问题. 我们一起来思考 ...
- 设置select下拉框不可修改的→“四”←种方法
设置select下拉框为不可修改的几种方法: 因为select的特殊性,导致它不能像input表单一样简单地设置一个readonly来限制修改,所以,我们需要进行别的操作! 1.为下拉框添加样式,可以 ...
- 将页面元素置为不可修改Readonly,所有元素统一修改,统一调用
使用JS方法,实现任何形式的元素的不可修改操作 <script language="javascript"> /**将所有元素置为不可修改 **/ function r ...
- Myeclipse中修改项目默认编码还是乱码?一步永久解决!
在myeclipse中修改默认编码后发现项目还是乱码? 点击Windows选择Preferences 如下图
- linux修改mysql密码sa_如何修改SA口令,数据库SA密码怎么改?
[问题现象]安装数据库的时候设置过SA口令,安装后不记得了?有没有办法可以修改数据库SA口令? [原因分析]各版本数据库更改SA口令的方法不一样,一般MSDE2000数据库安装时没有SA口令,SQL ...
- mysql修改校对集_MySQL 教程之校对集问题
本篇文章主要给大家介绍mysql中的校对集问题,希望对需要的朋友有所帮助! 推荐参考教程:<mysql教程> 校对集问题 校对集,其实就是数据的比较方式. 校对集,共有三种,分别为:_bi ...
- ubuntu 修改时区、时间、同步网络时间、将时间写入硬件
查看系统当前的时间状态 $ timedatectl statusLocal time: 六 2021-10-30 09:33:37 CSTUniversal time: 六 2021-10-30 01 ...
- 数据结构(03)— 数据处理基本操作(数据的查找、新增、删除、修改)
我们先来看一个关于查找的例子.查找,就是从复杂的数据结构中,找到满足某个条件的元素.通常可从以下两个方面来对数据进行查找操作: 根据元素的位置或索引来查找: 根据元素的数值特征来查找. 针对上述两种 ...
最新文章
- 简单时间复杂度大O记法
- MyBatis——@Result注解column参数传递——父查询函数的参数传递到子查询
- C语言switch中break的作用,C语言中switch...case语句中break的重要性
- HTML5 API详解(16):web socket 全双工通信
- Java7并发编程指南——第七章:定制并发类
- qq数据泄露_有哪些良好的上网习惯,可以避免隐私泄露?
- Python使用模糊哈希值比较文件相似度
- P1494 [国家集训队]小Z的袜子/莫队学习笔记(误
- 互联网日报 | 腾讯地图全国上线聚合打车服务;国庆档首日票房突破7亿;特斯拉国产Model3再降价...
- 【堆排序的递归和非递归实现】Java实现
- python神经网络图像分类,图像分类卷积神经网络
- c语言数字大小32768,c语言中int(2byte)的表示范围是为什么是-32768~32767!
- 阿里云邮箱域名解析设置要求
- 微信红包又创新纪录 跨年夜发红包数达23.1亿次
- 佳能数码相机,不能安装驱动程序
- 买的香港云服务器怎么用?云服务器使用教程
- 微信公众号支付开发配置
- 解决div高度不自动增加的问题
- Java_7.1 ArrayList应用点名器
- TI文档中的名词解释(持续更新中)
热门文章
- python环境搭建心得_python第一课 基本语法搭建以及环境
- 大数据集群搭建(一)虚拟机和Centos6的安装
- 决策树(回归树)——波士顿房价
- 国产MCU-CW32F030开发学习-圆形GC9A01_LCD模块
- Go框架之Beego简介部署及程序流程整合
- 从摆地摊到开网店,这对小夫妻一年狂赚45万元
- 腾讯企业邮箱产品优势
- Phrack安全杂志:详细分析堆栈溢出Smashing The Stack For Fun And Profit(Aleph One) 关于粉碎堆栈的秘密
- VC6.0的MFC简单计算器制作
- Qt项目: 图片查看器