问题描述
我正在尝试测量在文本框中按下键的时间,但我尝试过的任何方法都没有用。我计划获得触发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提示您应更改应用以支持这些用户。