解决webView中输入框被软键盘挡住的问题
来源:互联网 发布:可视化编程工具 编辑:程序博客网 时间:2024/06/01 08:46
问题描述:
在项目中用到了有赞商城的三方框架(实际就是加载了WebView),当其运行在某些机型上时出现了软键盘遮挡了输入框,导致用户输入文字时看不到文字内容。在网上查找了相关资料,说是这本身就是安卓的一个BUG,一直未解决。但是依然有高手给出了解决办法,忘了是在谁哪里找到的解决方案了,在此说一声抱歉, 拿过来一用的确是解决了软键盘被挡住的问题,但在一些存在虚拟键的机型上出现了适配问题,经过一天(人太笨且对屏幕适配不太熟)终于解决了该问题,在此给出了解决方案。
解决方案:
在WebView对应的Activity中的onCreate中使用:AndroidBug5497Workaround.assistActivity(activity);
解决大致思路:
打开或关闭软键盘,显示或隐藏虚拟键盘时,都会引起Activity的有效(可见)高度的变化。故通过监听这些变化来重新设置activity的可见高度即可。
public class AndroidBug5497Workaround { public static void assistActivity(Activity activity) { new AndroidBug5497Workaround(activity); } private View mChildOfContent; /*保存改变高度前的高度*/ private int usableHeightPrevious; private FrameLayout.LayoutParams frameLayoutParams; private Activity activity; private AndroidBug5497Workaround(final Activity activity) { this.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() { //activity有效高度 int usableHeightNow = computeUsableHeight(); //有效高度与之前的有效高度不等时,则重新设置高度 if (usableHeightNow != usableHeightPrevious) { //可能是因为用了沉浸式,所以在有效高度上需要加上状态栏的高度 //如果你发现这样写高度不对,可以去掉状态栏高度试试 frameLayoutParams.height = usableHeightNow + getStatusHeight(activity); mChildOfContent.requestLayout(); //保存本次有效高度 usableHeightPrevious = usableHeightNow; } } private int computeUsableHeight() { Rect r = new Rect(); mChildOfContent.getWindowVisibleDisplayFrame(r); return r.bottom - r.top;// 全屏模式下: return r.bottom }/** * 获得状态栏的高度 * * @param context * @return */ public static int getStatusHeight(Context context) { int statusHeight = -1; try { Class<?> clazz = Class.forName("com.android.internal.R$dimen"); Object object = clazz.newInstance(); int height = Integer.parseInt(clazz.getField("status_bar_height") .get(object).toString()); statusHeight = context.getResources().getDimensionPixelSize(height); } catch (Exception e) { e.printStackTrace(); } return statusHeight; }}
阅读全文
0 0
- 解决webView中输入框被软键盘挡住的问题
- 解决 Android 软键盘挡住输入框的问题
- 解决 Android 软键盘挡住输入框的问题
- Android WebView 软键盘挡住输入框
- 软键盘挡住webview输入框
- 解决安卓全屏“FLAG_FULLSCREEN”状态下“adjustResize”失效,全屏状态下WebView的输入框被软键盘挡住的问题
- 解决安卓全屏“FLAG_FULLSCREEN”状态下“adjustResize”失效,全屏状态下WebView的输入框被软键盘挡住的问题
- 教你解决android软键盘挡住输入框问题!
- 教你解决android软键盘挡住输入框问题
- 解决android软键盘挡住输入框问题!
- android软键盘挡住输入框问题 完全解决
- 教你解决android软键盘挡住输入框问题!
- 教你解决 android软键盘挡住输入框问题
- 解决android软键盘挡住输入框表单问题
- 仿QQ空间登录UI,解决软键盘弹出挡住输入框的问题
- 解决react-native软键盘弹出挡住输入框的问题
- 针对软键盘挡住input输入框的问题
- 软键盘挡住输入框问题的终极解决方案
- Android 8.0 行为变更
- 欢迎使用CSDN-markdown编辑器
- Linux中Ubuntu命令
- MySQL · 引擎特性 · Group Replication内核解析
- 让axios发送表单请求形式的键值对post数据
- 解决webView中输入框被软键盘挡住的问题
- 用类描述电脑CPU的速度和硬盘的容量
- ColorPickerDialog颜色选择弹出框
- 图片存储到数据库中,通过Servlet+jsp进行图片的存储及展示
- 文本数据库 主键重复问题
- 如何用10只实验鼠检测出1000个药瓶中哪个有毒药?
- 联想笔记本无声音
- 如何搭建一套个性化推荐系统?
- 查Postgresql 数据库、各表占用磁盘大小