当前位置: 首页 > 知识库问答 >
问题:

在Android中检测物理键盘上的Shift+Enter

鲜于宏义
2023-03-14

在为Chromebooks和物理键盘准备Android应用程序时,我希望在编辑文本中区分从物理键盘接收“Enter”(键事件66)和“Shift+Enter”(显然也是键事件66)。我尝试了许多不同的解决方案,例如

  • 活动中的DispatchKeyEvent(KeyEvent事件)。然而,Event.getModifiers()总是返回0,与Event.get转移()一样。KeyEvent.IsShiftPressed()始终返回false。
  • 活动中的onKeyDown(int keyCode,KeyEvent KeyEvent)具有相同的结果。KeyEvent.IsShiftPressed()也总是返回false。

我没有找到使用onKeyUp()、onKeyPreIme()、EditText.SetOnKeyListener(...)或EditText.AddTextChangedListener(new TextWatcher(){...})的方法。我在获取Enter事件时没有遇到任何问题,但是Shift+Enter在我尝试过的所有方式中都与Enter事件没有区别。所以我的问题是:有没有其他的Android开发人员找到了从物理键盘上正确捕捉Shift+Enter的方法?

共有1个答案

充栋
2023-03-14

我也遇到了同样的问题,我通过检测“shift”down和“shift”up事件来修复它,并定义了一个存储状态的布尔值。这是我的代码,希望能帮到你。

final boolean[] isPressed = {false};
    inputEditText.setOnKeyListener(new View.OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // If the event is a key-down event on the "enter" button
            if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                    (keyCode == KeyEvent.KEYCODE_ENTER)) {

                if (isPressed[0]) {

                   // Shift + Enter pressed

                    return false;
                } else {

                  // Enter pressed                  

                    return true;
                }
            }

            if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                    (keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT)) {
                isPressed[0] = true;
                return false;
            }

            if ((event.getAction() == KeyEvent.ACTION_UP) &&
                    (keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT)) {
                isPressed[0] = false;
                return false;
            }


            return false;
        }
    });
 类似资料:
  • 问题内容: 我想检测用户是否按下了jQuery。 这怎么可能?需要插件吗? 编辑:看来我需要使用该方法。 我想知道是否有人知道该命令是否存在浏览器问题-就像我应该知道的浏览器兼容性问题一样? 问题答案: jQuery的全部要点是,您不必担心浏览器的差异。我很确定您可以放心在所有浏览器中都为13。因此,请记住这一点:

  • 我试图编码一个简单的键盘,并想实现上述4个键。在我的文件中,我定义了如下的布局- 我一直在中使用ASCII代码。但是我不知道如何处理Ctrl、Alt、Delete和Shift键。我使用作为backspace。但不确定如何实现delete键。 编辑:如果有人能在箭头键上加入一些指针,那也会很有帮助。

  • 我正在尝试构建一个自动化脚本来安装chrome扩展。 在我的本地系统(windows 10)上,当使用java的Robot类时,所有这些都可以正常工作,因为我有一个物理键盘连接到我的计算机。 问题是——当我试图在虚拟机(亚马逊EC2,视窗服务器)上运行这种自动化时,机器人类不起作用,因为它无法检测键盘的物理连接。 有没有其他方法可以在不连接键盘的情况下模拟键盘行程? 仅供参考,我必须使用键盘,因为

  • 我正在尝试使用selenium创建自动化,以安装chrome扩展。当我尝试在amazon虚拟机上运行这个jar时,我遇到了一个问题,因为当我尝试用robot类按enter键时,它不起作用,因为我没有连接物理键盘。我不能在selenium中使用sendkeys,因为来自google的pop不在同一页面,selenium无法识别它。有什么解决办法吗?

  • 问题内容: 都好 我有一个控制台项目,旨在让用户按下键盘方向键(非数字键盘)来移动化身。我在编码时很难检查是否按下了这些键。在Pascal中,使用“ readkey”和代码非常容易,例如,按下按键的代码为#80。但是,尽管我认为我了解System.in和BufferedInputStream的用法,但我对如何在Java中实现相同功能感到困惑。 有人可以帮我吗?非常感谢您的想法或提示。 问题答案:

  • > 我已经尝试了所有的文本区功能,比如type=“email”等等,我无法让它在所有Android版本上都工作。 我已经安装了cordova插件ionic键盘,它显示的键盘没有任何建议(图A)。但当我轻触ion文本区域时,本机键盘会显示出来(图B)。 我如何解决这个问题,或者禁用本机键盘上的建议,或者让Cordova插件替换我的ion textarea的本机键盘,或者其他什么?谢谢 图像A 图像B