Android在textEdit中跟踪按键释放和按键之间的时间

问题描述

我正在尝试测量在文本框中按下键的时间,但我尝试过的任何方法都没有用。我计划获得触发keydown的keyevent和触发keyup的keyevent并减去它们的时间。我已经尝试过使用onKeyUp和onKeyDown,但是它们不适用于文本框。因此,我转向了OnKeyListener,但这似乎只能抓住ACTION_UP而不是ACTION_DOWN。

这是我的代码

        EditText journalText = (EditText) findViewById(R.id.journalText);
        journalText.setonKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view,int keyCode,KeyEvent event) {
                if(event.getAction() == KeyEvent.ACTION_DOWN) {
                    switch (keyCode) {
                        case KeyEvent.KEYCODE_E:
                            Date date = new Date();
                            long time = date.getTime();
                            Log.d("apple","Time: " + time);
                            timedown.add(Long.toString(time));
                            Log.d("apple","E was pressed Down");
                    }
                }
                else if(event.getAction() == KeyEvent.ACTION_UP){
                    switch(keyCode){
                        case KeyEvent.KEYCODE_R:
                            Date date = new Date();
                            long time = date.getTime();
                            Log.d("apple","R was pressed Up");
                    }
                }
                return false;
            }
        });

r和e交替按下的结果仅显示“ R被按下向上”输出,而没有E被按下。

在没有文本框的不同页面上使用onKeyUp和onKeyDown时,会同时注册两种类型的事件,因此我认为此问题不是由Android Studio中的软键盘引起的。

解决方法

您已经使用的硬件 键盘。

但是您不能使用Android中的屏幕键盘来做到这一点,因为尽管软件键盘可以像硬件键盘一样呈现自己,但它们没有义务,因此它们不起作用有按键,但有批输入。参见InputConnection

简而言之,您不能假设用户使用带有键的东西来打字,而Android应用程序应能够与用户选择的键盘一起使用,因此Android不允许您强迫用户以您所使用的方式输入文本希望他们喜欢。

您需要回答的一些问题:

  • 您的程序如何与手势输入一起使用? (滑动,滑行输入,但是您可以选择称呼它)
  • 您的程序如何与轻拂输入一起工作,用户按下按键并在四个方向之一上轻拂以输入字符?
  • 您的程序如何与手写键盘一起使用?
  • 您的程序如何处理听写内容?
  • 您的程序将如何与音译IME配合使用?全世界一半以上的人口使用IME?

对于这些类型的输入,按键的概念没有意义,并且要求键盘作者模拟按键会限制发明新的更好的输入方法。

如果您的答案是这些键盘的用户无法使用您的应用,则Android提示您应更改应用以支持这些用户。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...