Android 4.1.1 中的 WebView 无法接收 KEYCODE_DEL

2024-03-16

我要实现WebView通过创建复杂的 JavaScript 来处理键盘事件可进行编辑。在所有 Android 版本上一切正常,除了4.1. In 4.1我可以处理所有关键事件,除了KeyEvent.KEYCODE_DEL。看来我们无法应对KEYCODE_DEL活动为WebView在安卓4.1中?如果有人能在这个问题上帮助我,我非常感激

Thanks


看起来像是 Android 的错误。对我有用的一个简单的解决方法是设置

android:targetSdkVersion="15"

在你的 AndroidManifest.xml 中

EDIT:

经过更多研究后,我现在认为这不是一个错误,而是一个故意的改变。这KeyEvent文档说:

由于软输入法可以使用多种创造性的输入方式 文本,不能保证软键盘上的任何按键都会 生成一个按键事件:这由 IME 自行决定,并且 不鼓励发送此类事件。你永远不应该依赖 接收软输入法上任何键的 KeyEvents。尤其, 默认的软件键盘永远不会向任何键盘发送任何按键事件 面向 Jelly Bean 或更高版本的应用程序,并且只会发送事件 对于某些应用程序按删除键和返回键 目标是冰淇淋三明治或更早。

但实际上,除了删除键之外,它仍然会发送大多数按键事件。由于我确实需要所有关键事件,所以我想出了这个解决方案:

首先,创建自己的View(就我而言,它源自TextView) 像这样:

public class MyTextView extends TextView {

  ...

    @Override
    public InputConnection onCreateInputConnection(EditorInfo editorInfo) {
        editorInfo.actionLabel = null;
        editorInfo.inputType   = InputType.TYPE_NULL;
        editorInfo.imeOptions  = EditorInfo.IME_ACTION_NONE;

        return new MyInputConnection(this, false);
    }

    @Override
    public boolean onCheckIsTextEditor() {
        return true;
    }
}

二、创建MyInputConnection通过子类化BaseInputConnection像这样:

public class MyInputConnection extends BaseInputConnection { 

    ...


    // From Android 4.1 this is called when the DEL key is pressed on the soft keyboard (and
    // sendKeyEvent() is not called). We convert this to a "normal" key event.
    @Override
    public boolean deleteSurroundingText(int beforeLength, int afterLength) {
        long eventTime = SystemClock.uptimeMillis();
        sendKeyEvent(new KeyEvent(eventTime, eventTime,
                KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0,
                KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE | KeyEvent.FLAG_EDITOR_ACTION));
        sendKeyEvent(new KeyEvent(SystemClock.uptimeMillis(), eventTime,
                KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0,
                KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE | KeyEvent.FLAG_EDITOR_ACTION));
        return true;
    }

In your InputConnection课堂上你可以很好地控制正在发生的事情。例如,您可以覆盖commitText()获取有关外文字母键等事件的方法。

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

Android 4.1.1 中的 WebView 无法接收 KEYCODE_DEL 的相关文章

  • WifiConfiguration 在 Lollipop 中启用网络

    我正在研究 Wifi 项目 有一个模块可以让用户以编程方式加入 wifi 在 kitkat 及以下版本中它可以成功工作 但在 Lollipop 中它不起作用 这是代码 WifiManager wifiManager WifiManager
  • GCM 通知的自定义 UI

    In GCM Docs http developer android com google gcm gcm html其给定 它不提供任何内置用户界面或其他处理 消息数据 GCM 只是将收到的原始消息数据直接传递给 Android 应用程序
  • 应用程序启动时立即隐藏导航栏

    基于以下代码片段 我能够隐藏状态栏当应用程序启动时 但不是导航栏 由后退 主页和任务管理器按钮组成的栏 因为它隐藏了稍后在 MainActivity 的线程完成加载后 这是清单
  • Android,无法从谷歌API获取天气

    以下代码之前运行良好 class RetreiveWeatherTask extends AsyncTask
  • 使用 ArrayAdapter 的 ListView 中的按钮

    我有一个使用 POJO 类填充的 ArrayAdapter 列表视图由 2 个布局组成 1 代表菜单项 1 代表类别 带分隔符的列表视图很好 后来我尝试在每个菜单项行中添加一个按钮来编辑其中的详细信息 当我尝试获取单击按钮的行的位置时 我遇
  • 将文本视图包裹在图像视图周围

    晚上好 我正在尝试将文本包裹在图像视图中 就像这里提出的问题一样 Textview 环绕 View https stackoverflow com questions 3626750 textview wrap around view 在风
  • 如何区分ActionBarSherlock中的两次菜单项点击?

    我最近一直在使用 ActionBarSherlock 并按照各种教程 我编写了这段代码来将项目添加到操作栏 Override public boolean onCreateOptionsMenu Menu menu menu add Ref
  • 检查 Firebase 邀请是否引导至 Play 商店

    当在 Android 上使用 Firebase 邀请并在应用程序启动时访问动态链接时 有没有办法知道用户是通过邀请刚刚安装了该应用程序还是已经安装了该应用程序 非常感谢 Borja 编辑 感谢 Catalin Morosan 的回答 事实证
  • 在 doInBackground 方法中启动活动

    在下面的代码中 我从互联网下载 json 并希望显示在列表中 如果列表为空 则转到另一个活动 但其他活动未启动 没有错误 但没有启动活动 感谢您的帮助 package ir mohammadi android nightly import
  • 使用 appcelerator titan 在 android 中后退按钮退出应用程序

    我是钛开发的新手 在本机 android 中 如果我们按下后退按钮 则仅当前活动将被关闭 并且它将返回到上一个活动 但是当我使用 Titanium 在 Android 中按下后退按钮时 它会从应用程序退出 我怎样才能改变这种行为 有两种类型
  • 如何从另一个应用程序向一个应用程序添加视图

    我的应用程序叫做我的好应用 MyNiceApp 主要只是一个加载视图的核心coreView在主活动中onCreate coreView由用户根据需要下载的其他插件的视图填充 我定义了核心视图上的各个区域 这些区域可以通过 MyNiceApp
  • Android 可检查子菜单选项

    所以我有一个用于选项菜单项的子菜单 我想要一个可检查条目的列表 用户可以根据需要选择 取消选择多个条目 我无法解决的唯一问题是如何防止单击其中一个复选框时关闭选项菜单 我看到 PerformShortcut 有一个 FLAG PERFORM
  • 如何在android中的应用程序小部件中找到哪个按钮被点击?

    我想设计一个简单的应用程序小部件 它有两个文本视图和两个用于上一个 下一个的按钮 我很难处理应用程序小部件中的按钮单击 实际上我的愿望是 如果用户单击上一个按钮 我想显示以前的值 如果用户单击下一个按钮 我想显示数据库中的下一个值 如何知道
  • 首选项活动中的广告“没有足够的空间来显示广告!需要:<480, 75>,拥有:<432, 1073741823>”

    我试图在偏好活动中展示广告 但它从未出现 Logcat 始终显示消息 没有足够的空间来显示广告 想要 有 这就是我制作广告的方式 我对广告有自定义偏好 public class AdmobPreference extends Prefere
  • 在 Android 5 上支持 BLE 外设角色的芯片组 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Android 5 0 Lollipop 引入的新 BLE 外设模式将不会在 Nexus 4 5 或 7 上启用 https code
  • Android 连接有时会被拒绝(并非所有时候)

    我编写了一个 WiFi Direct 代码连接并在它们之间创建了一个连接 然后我创建了一个ServerSocket在第一面和一个Socket在客户端并开始在它们之间发送数据 第一次启动应用程序时它工作成功 但是当我关闭应用程序并再次启动它时
  • Android 如何从我的应用程序使用 SD 卡中的文件路径预览图像

    文件存在于sdcard image jpg我想创建我自己的应用程序 活动 按下按钮时 需要使用内置图像查看器显示存储在 SD 卡中的图像 按图像查看器中的后退按钮后 它应该返回到我正在运行的应用程序 需要一些帮助 您可以为此创建一个具有适当
  • 未调用内容提供商 query() (Android TV)

    据报道 我正在尝试将我的应用程序纳入 Android TV 全局搜索中文档 http developer android com training tv discovery searchable html我必须创建以下内容 内容提供商 可搜
  • 上次更新arm64-v8a后,模拟器在M1 Mac上显示离线

    昨天模拟器运行得很好 系统镜像为arm64 v8a 我不太记得工作系统映像的版本名称 但是昨天我接受了 ARM 64 系统映像的更新 版本名称是 S 我可以从 AVD 管理器启动模拟器 当我按 运行应用程序 按钮时模拟器也会启动 但是 该应
  • Android应用程序中的模式输入

    我想知道是否有其他替代方案可以替代 Android 上平庸的 EditText 密码输入 是否有 API 或开源代码可以集成到我的应用程序中 类似于锁屏图案解锁 Intent 可能会返回哈希值 数字 字符串或代表用户输入的模式的任何内容 我

随机推荐

  • 使用 keras 保存的 ML.NET 加载模型

    我有一个用 Python 和 Keras 实现的神经网络 训练完成后 我导出了模型 并得到了两个文件 model js 和 model h5 现在我想在 NET 项目中进行实时分类 并且我想使用经过训练的神经网络 ML NET 中是否有一种
  • 在 R 绘图子图上获取单独的轴标签

    使用 R 时plotly包版本 4 5 6 我无法弄清楚如何在使用组合多个图时显示轴标签subplot 以下是未显示 x 轴标签的示例 require plotly a lt data frame x1 1 3 y 30 32 b lt d
  • 获取 MongoDB 中数组的第 n 个元素

    作为 MongoDB 文档的一部分 我存储了一个对象数组 例如 如何仅查询数组的第四个元素 所以我不想取出整个数组 只取出第四个元素 Use slice db foo find bar xyz my array slice n 1 将检索
  • 没有名为flask_script的模块

    我正在尝试运行一个需要flask script 的程序 Flask既安装在我的机器上 又安装在虚拟环境中 我无法让我的机器或虚拟环境找到flask script 请指教 运行Ubuntu 你真的安装了 Flask Script 吗 如果没有
  • 从mongodb集合中获取最新记录

    我想知道集合中最新的记录 怎么做 注意 我知道以下命令行查询有效 1 db test find sort idate 1 limit 1 forEach printjson 2 db test find skip db test count
  • SQL ROW_NUMBER() 过度性能问题

    我有这个 SQL 工作正常 希望我的过滤器返回具有最高 UserSessionSequenceID 的最新唯一 SessionGuids 问题是性能很糟糕 即使我有很好的索引 我如何重写它 以省略 ROW NUMBER 行 SELECT T
  • 替换为相应的 的正则表达式

    我正在寻找 PHP preg replace 解决方案 找到图像链接并将其替换为相应的图像标签 Find a href http www domain tld any valid path to imagefile ext This wil
  • 如何在arch linux中降级到cuda 10.0?

    我想在 arch linux 中将我的 cuda 10 1 降级到 cuda 10 0 因为 TensorFlow 仅需要 cuda 10 0 我在 arch Linux 的 CUDA 10 1 上安装了tensorflow 但我不知道te
  • 为什么 SQL Server DATETIME 类型可以节省 1/300 秒的时间?

    SQLServer 日期时间格式存储为 8 个字节 其中前四个字节是自 1900 年 1 月 1 日以来的天数 其他四个字节是自午夜以来的刻度数 刻度为秒的 1 300 我想知道这是为什么 那1 300是从哪里来的呢 这其中一定有一些历史原
  • Android JavaCV 从相机创建 IplImage 以与 ColorHistogram 一起使用

    我在 Android 中使用 JavaCV 在我的代码中 我创建了一个 ImageComparator OpenCV CookBook 的类 http code google com p javacv source browse OpenC
  • 使用正斜杠与连字符的Javascript日期[重复]

    这个问题在这里已经有答案了 当我创建新的 Date 对象并使用连字符传递日期时 new Date 2015 07 02 I get Thu Jul 02 2015 01 00 00 GMT 0100 IST 当我使用正斜杠时 new Dat
  • NSButtonCell 作为 NSTableVIew 中的复选框未被选中

    我有一个用于多重选择的 NSTableVIew 有两列 第一列以 NSButtonCell 作为复选框 另一列作为标题 这个想法是检查要添加到数组后的项目 问题是当我单击复选框时 它们的状态不会改变 我尝试附加 IBAction 但发送动作
  • 如何使用 ClearCase 递归地“添加到源代码管理...”?

    我将 zip 文件交付解压到 Clearcase 视图中 现在我想将完整的文件树添加到存储库中 GUI 仅为单个文件 目录提供 添加到源代码管理 你知道如何递归添加整棵树吗 我使用的是 Windows 系统 但安装了 Cygwin 我宁愿使
  • 如何将 Spark 中的 StructType 分解为 json 数据帧中的行而不是列

    我用这个模式读取了一个嵌套的 json root company struct nullable true 0 string nullable true 1 string nullable true 10 string nullable t
  • 如何显示日期范围 Jquery 之间的多个日期范围

    您好 我有一个日期范围选择器 我想显示为特定日期范围定义的所有日期范围 如下所示 假设我的日期范围是 01 01 2017 01 07 2017 我有一个数组 其中定义了 db 中上述日期范围之间的所有日期 所以该数组如下 sub date
  • Keycloak invalid_token 未找到指定孩子的公钥

    我正在使用 keycloak 来保护我的休息服务 并且我能够获取令牌 但是当我使用此令牌来获取我的休息服务响应时 出现以下错误 HTTP 1 1 401 Unauthorized Cache Control no cache no stor
  • 应用程序池模式问题:经典还是集成

    我面临一个问题 希望您能给我一些指导 我有一个使用 spring net 和 ext net 库的 Asp net 4 0 网站应用程序 我已将其部署在 IIS 7 中 使用classic应用程序池模式并且它可以工作 它在集成模式下不起作用
  • Express.js ERR_TOO_MANY_REDIRECTS 错误

    这是场景 如果用户想要查看需要用户访问的页面 我想将他重定向到主页 但是当我尝试访问主页时收到 ERR TOO MANY REDIRECTS 错误 我不知道如何解决这个问题 app js exports ensureAuthenticate
  • 无法像使用 CTRL-r 一样转发搜索 Bash 历史记录

    I am trying to search my bash history similarly as with CTRL r but to forward direction It has been a pain for me when I
  • Android 4.1.1 中的 WebView 无法接收 KEYCODE_DEL

    我要实现WebView通过创建复杂的 JavaScript 来处理键盘事件可进行编辑 在所有 Android 版本上一切正常 除了4 1 In 4 1我可以处理所有关键事件 除了KeyEvent KEYCODE DEL 看来我们无法应对KE