Android 软键盘在全屏时隐藏来自 CordovaWebView 的输入

2023-11-24

我有一个 CordovaWebView,它呈现一些 html 表单。当我关注输入字段时,Android 的软键盘会弹出,对于某些字段,根据它们的位置,它会位于其顶部。基本上,它不会调整 CordovaWebView 的布局大小。

无论我做什么,我都无法改变这一点,据说这与 CordovaWebView 处于全屏模式有关。

我该如何解决这个问题?

PS:这到底是不是bug?

谢谢你们!


事实上,正如 @user2493245 所说,这是一个众所周知的错误。但我找到了一个解决方法,至少就我的具体情况而言。

在 WebView 上,只需检查视图可见区域的坐标。

final View activityRootView = this.root;
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    public void onGlobalLayout() {
        Rect r = new Rect();
        //r will be populated with the coordinates of your view that area still visible.
        activityRootView.getWindowVisibleDisplayFrame(r);

        int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
        if(heightDiff != lastValue) {
            if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
                appView.sendJavascript("onKeyBoardShow(" + r.bottom + ");");
            } else {
                appView.sendJavascript("onKeyBoardHide();");
            }
            lastValue = heightDiff;
        }
     }
});  

如您所见,我将该信息发送到 WebView。在 HTML 上,我有两种方法来处理这个问题:

function onKeyBoardShow(bottom) {
    var diff = ($('input[type=text]:focus').offset().top - bottom) + 50;
    if(diff > 0) {
        $('body').css("top", (diff * -1) + "px");
    }
};

function onKeyBoardHide() {
    $('body').css("top", "0px");
};

基本上,onKeyBoardShow 会聚焦输入字段并计算移动主体所需的像素数量,从而允许用户看到输入字段。 onKeyBoardHide,只需将主体置于其原始位置即可。

PS:这仅在视口以 devicedpi 为目标时起作用,因为我们需要修改获取有关设备 dpi 的 diff 的方式。

PS2:第一部分代码不是我的,我只是为了满足我的需要而编辑的。我在一个问题上看到了这一点,但不幸的是现在我找不到它。如果我找到它,我会在这里发布链接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 软键盘在全屏时隐藏来自 CordovaWebView 的输入 的相关文章

  • 位图背景图像应支持哪些屏幕尺寸/密度组合?

    我正在编写一个应用程序 我需要一些全屏位图背景 基于我天真的阅读支持多屏 http developer android com guide practices screens support html在 Android 文档中 为了涵盖我的
  • 有没有一种方法可以在不使用意图的情况下在活动之间发送数据?

    我有一个对于每个用户来说都是唯一的用户名 我想将其发送到某个活动 但我不想使用意图 create an intent and sends username Intent intent new Intent RegisterOwner thi
  • 将JSON数据解析到Android ListView中

    我已经潜伏这个网站很长一段时间了 幸运的是 到目前为止我所有的问题都得到了解答 我希望你们中的一些人能够阐明我的问题 我可以成功地让 ListView 来显示字符串数组 但是当我尝试将 JSON 数据解析为数组时 我的程序只是强制关闭 而
  • Facebook4j API:搜索

    我正在使用 Facebook4j 通过关键字获取状态 facebook4j conf ConfigurationBuilder fac new facebook4j conf ConfigurationBuilder fac setDebu
  • 使用busybox在后台安装apk

    我可以在 root 设备上使用 busybox 在后台安装 apk 吗 我看到类似的东西 但它不起作用 process install CommandCapture command new CommandCapture 0 chmod 77
  • 在Java中测试服务器是否启动的正确方法?

    简单地查看是否可以建立与网站 服务器的连接的正确方法是什么 我想要这个用于我正在编码的应用程序 如果我的网站离线 它只会提醒我 Thanks 您可以使用 HttpURLConnection 发送请求并检查响应正文中是否有该页面特有的文本 而
  • 如何将Android中的cURL发送到REST服务

    我是 android 新手 我想从 REST 服务获取一些数据 但在初始化发送到 REST 服务的方法时遇到一些问题 您知道 REST 服务使用 cURL 来操作一些数据 POST PUT GET DELETE 现在如何在 android
  • 在新的菜单提供程序 API 弃用“setHasOptionsMenu”后,隐藏 Fragment 中的菜单项并在导航返回上再次显示它们

    大约一个月前 Android 团队弃用了onCreateOptionsMenu and onOptionsItemSelected 也setHasOptionsItemMenu 不幸的是 这破坏了我所有的代码 我的应用程序有很多片段 当用户
  • 地理编码 API 与地理编码器

    在我的应用程序中 我需要使用地理编码 但我不太清楚该使用哪种方法 直到昨天我在URL中添加了参数maps googleapis com maps api geocode json address myparameter sensor fal
  • Android:如果任务管理器终止,则重新调用应用程序

    如果应用程序线程被任务管理器杀死 则应用程序线程将关闭 需要重新调用应用程序 就像它被其他应用程序或任务管理器杀死一样 任何想法 您必须使用 START STICKY 命令运行后台服务 只需扩展 Service 并重写 onCommand
  • Android 媒体播放器搜索栏

    我有一个创建 播放和处理媒体播放器 只是音频 的服务 但我在主要活动中有一个搜索栏 我想自然地显示音频文件的进度并允许用户搜索到不同的位置 我花了很长时间才弄清楚 将 UI 中的搜索栏连接到服务中的媒体播放器的最佳或正确方法是什么 我将这样
  • 如何为 flutter 绘图应用实现橡皮擦功能

    有一个关于通过 flutter 创建绘图应用程序的视频 YouTube https www youtube com watch v yyHhloFMNNA 它支持当用户点击屏幕时绘制线 点 但我找不到像 Android 本机那样擦除用户绘制
  • 如何关闭导航抽屉以使用返回主页图标按钮?

    我也将操作栏与搜索栏一起使用 并且我需要像后退按钮一样使用 ActionBar ico 但我也在使用导航抽屉 如何关闭 隐藏 禁用导航抽屉菜单以使用后退按钮 我的 ActionBar 代码 Override public boolean o
  • 如何获取小区广播消息?

    我尝试像模拟人生一样获取小区广播消息的文本 但它不起作用 public class SMSReceiver extends BroadcastReceiver Override public void onReceive Context c
  • 如何向开关对象添加/更改波纹效果

    下面是我自定义的开关 红圈是默认的波纹效果 我发现设置一个波纹可绘制作为开关的背景 控制波纹的颜色
  • 如何从图库动态卸载图像?

    我有自定义 ImageView public class ShadowedImageView extends ImageView private Paint mPaint public Bitmap bitmap null private
  • 在循环中按名称访问变量

    我正在开发一个 Android 项目 并且有很多可绘制对象 这些绘图的名称都类似于icon 0 png icon 1 png icon 100 png 我想将这些可绘制对象的所有资源 ID 添加到整数 ArrayList 中 对于那些不了解
  • Android项目中使用java获取电脑的IP地址

    我在用ksoap2 android http code google com p ksoap2 android 我需要使用java获取IP地址 这样我就不必每次都手动输入它 我所说的 IP 地址是指 例如 如果我这样做ipconfig使用命
  • 如何检测日期选择器对话框的取消单击?

    我正在使用以下 日期选择器的示例 http developer android com guide tutorials views hello datepicker html http developer android com guide
  • 应用程序关闭时单击 Firebase 通知后打开特定活动/片段

    我知道这个问题似乎重复 但根据我的要求 我在网上搜索了很多帖子 但没有任何对我有用 我的要求 我正在使用 Firebase 来获取推送通知 当应用程序打开时意味着一切正常 但我的问题是 如果有任何推送通知出现 应用程序处于后台 关闭意味着我

随机推荐

  • Linux 中“系统”和“执行”之间的区别?

    有什么区别system and exec家庭命令 特别是我想知道他们中的哪一个创建子进程来工作 system 呼唤sh处理你的命令行 这样你就可以获得通配符扩展等 exec 及其朋友用新的进程映像替换当前的进程映像 With system
  • nameof() 是在编译时评估的吗?

    在 C 6 中 您可以使用nameof 运算符获取包含变量或类型名称的字符串 这是在编译时评估的 还是在运行时通过某些 Roslyn API 评估的 Yes nameof 在编译时评估 查看最新版本的规格 表达式的名称是一个常量 在所有情况
  • Android:单独片段中的多个小吃栏(ViewPager)

    我有一个viewpager 当然还有一些片段 这些片段中的每一个都以 CoordinatorLayout 作为父级 我正在展示一个小吃栏 问题是 如果片段 A 显示小吃栏 那没问题 但如果它的相邻片段 B 也显示小吃栏 则片段 A 中的小吃
  • 参数化 sql 查询 - asp.net / c#

    所以我最近了解到我绝对应该使用参数化查询来避免 SQL 注入等安全问题 一切都很好 我已经成功了 此代码显示了我如何执行此操作的一些代码 param1 new SqlParameter param1 ParameterName userna
  • 如何通过java代码设置JMX远程端口系统环境参数进行远程监控?

    我有一个程序需要动态 即在运行时 打开一个可用的套接字并在其上启动 JMX 代理 此 JMX 参数是在 Java 代码内部设置的 而不是通过命令行设置的 这很好用 此后需要通过 Java Visual VM 进行监控 即发出 JMX 命令等
  • Get 和 post 方法与 HTTP 和 REST 相比的区别

    我是 REST 新手 我想知道什么时候使用get方法 什么时候使用post方法 在我的文献调查过程中 我接触到了这些知识 实际上 当我搜索 HTTP get 和 post 方法时 我读到 get 不对 URL 进行编码 而 post 对 U
  • 通过点击事件查找元素

    如何通过 jQuery 2 2 1 找到每个带有点击事件的元素 这似乎不再起作用 console log data this 0 events Try each function index value if data value 0 ev
  • 调用 $this->load->view() 后停止执行

    在Codeigniter中 我们如何在加载视图后停止执行 我试过这个 function index this gt load gt view myView die do not execute next code 但它导致空白屏幕 http
  • 如何在 bash curl 语句中包含“&”字符

    我正在尝试在 bash 中使用curl来下载网页 但是 URL 中的符号没有像我想要的那样被解释为字符 关于如何让 bash 相信该符号的任何想法 只是一个无聊的角色 没什么特别的 将整个 URL 放在双引号内应该可以解决您的问题
  • 我可以在不知道绑定本身的情况下更改 DataTrigger 中绑定的属性吗?

    我有一个TextBox如果框未聚焦 则格式化数字 但在编辑时保持数字未格式化 这是我想要的多个数字文本框的样式 但它们都包含不同的文本绑定 常规文本设置器和触发式文本设置器之间的唯一区别是触发式文本设置器具有StringFormat N2在
  • 我可以从 servlet 生成线程吗?

    在开始讨论我的主要问题之前 我想问一个基本问题 假设我正在运行一个简单的 Java 程序 它在 main 函数中生成一个线程 当main函数完成后 线程会继续运行吗 线程之间是否有父 子关系的概念 我有一个 servlet 需要很长时间才能
  • Qtableview 中的用户可编辑复选框

    我想在中实现用户可编辑复选框QTableView它是使用 QAbstractModel 创建的 我可以分配选中和未选中的复选框 但无法使其可编辑 标志设置为QItemIsUserCheckable 您可以通过实施模型轻松做到这一点setDa
  • 是否可以选择前面没有文本的元素?

    我想要一个匹配的 CSS 选择器 code in p code foo code bar p 但不是 code in p foo code bar code p code first child不起作用 两者都匹配 只是因为我认为这是不可能
  • 数据库架构比较错误:“版本存储内存不足”

    以下是我在 Visual Studio 2013 Professional w Update 3 中进行架构比较时收到的错误 我使用的是版本 2008 R2 DB 服务器 并且使用的是 SSMS 2014 这个错误持续了几周 并且越来越频繁
  • 带有 Service Worker 和 sw-precache 的“新版本可用”

    我正在尝试使用sw precache 但我一定做错了什么 我主要使用以下提供的演示代码github 仓库并且似乎无法获得应用程序的更新 一旦第一次被缓存 它就不会检查新版本 我期望当我发布新的 Service Worker 时 浏览器会请求
  • 使用 CRTP 模拟静态多态中的纯虚函数是否可能?

    我正在尝试使用 CRTP 实现编译时多态性 并希望强制派生类实现该函数 目前的实现是这样的 template
  • Java泛型:包含泛型的数组[重复]

    这个问题在这里已经有答案了 可能的重复 Java 操作方法 创建通用数组 创建通用数组时出错 我的任务是用 Java 编写一个哈希表 它必须适用于任何数据类型 我编写的代码的规则如下 哈希表必须有一个数组作为底层数据结构 其大小在构造对象时
  • 为什么 [01-12] 范围没有按预期工作?

    我正在尝试使用范围模式 01 12 在正则表达式中匹配两位数字 mm 但这并不按预期工作 您似乎误解了正则表达式中字符类定义的工作原理 匹配任何字符串01 02 03 04 05 06 07 08 09 10 11 or 12 这样的事情有
  • Angular 5 拦截器不会拦截从库发出的请求

    我在 Angular 5 中有一个有效的拦截器 它在 App module 的提供程序中注册 并正确拦截从应用程序发出的所有请求 问题是它不会拦截应用程序使用的库发出的请求 我正在使用一个开源库 NGX Jsonapi 并且需要拦截器在该库
  • Android 软键盘在全屏时隐藏来自 CordovaWebView 的输入

    我有一个 CordovaWebView 它呈现一些 html 表单 当我关注输入字段时 Android 的软键盘会弹出 对于某些字段 根据它们的位置 它会位于其顶部 基本上 它不会调整 CordovaWebView 的布局大小 无论我做什么