OnKeyUp

和;

OnKeyDown

事件不会影响它,因为软键盘几乎不会发出这些声音。

这是一个粗略的原型,它根据预期的字符串过滤字符输入。有很多改进空间;虽然自定义实现仍然比尝试使用框架方法更好,但它可能只捕获

艾斯

关键…这个

FilteredEditText

捕捉任何输入

之前

它可能出现在屏幕上-为了实现击键模式记录器,需要将期望的字符串拆分为

ArrayList

它还可以保存各个击键之间的持续时间;一旦记录了,就可以使用收集到的信息进行比较。

/**

* Filtered {@link AppCompatEditText}

* @author Martin Zeitler

* @version 1.0.0

**/

public class FilteredEditText extends AppCompatEditText {

private static final String LOG_TAG = FilteredEditText.class.getSimpleName();

private String expectedString = null;

public FilteredEditText(Context context) {

super(context);

}

public FilteredEditText(Context context, AttributeSet attrs) {

super(context, attrs);

}

public FilteredEditText(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

public void setExpectedString(@NonNull String value) {

this.expectedString = value;

this.setupInputFilter();

}

public void setupInputFilter() {

this.setFilters(new InputFilter[] {

new InputFilter() {

public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int destStart, int destEnd) {

if (source.length() > 0 && source.charAt(end-1) == expectedString.charAt(destEnd)) {

/* valid input received */

Log.d(LOG_TAG, "input accepted: " + String.valueOf(source.charAt(end-1)));

return source;

} else {

/* invalid input received */

Log.d(LOG_TAG, "input rejected: " + String.valueOf(source.charAt(end-1)) + " - expected: " + String.valueOf(expectedString.charAt(destEnd)));

return "";

}

}

}

});

}

/** hardware event */

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

Log.d(LOG_TAG, "onKeyDown()");

return super.onKeyDown(keyCode, event);

}

/** hardware event */

@Override

public boolean onKeyUp(int keyCode, KeyEvent event) {

Log.d(LOG_TAG, "onKeyUp()");

return super.onKeyUp(keyCode, event);

}

}

用途:

FilteredEditText mTextInput = findViewById(R.id.text_input);

mTextInput.setExpectedString("9RJhl6aH0n");

LogCAT输出:

D/FilteredEditText: input accepted: 9

D/FilteredEditText: input rejected: r - expected: R

D/FilteredEditText: input rejected: 4 - expected: R

D/FilteredEditText: input accepted: R

到目前为止,我已经用一个软件键盘测试了它……而我目前不能用BT硬件键盘测试它,因为电池是空的。我认为

InputFilter

捕获所有输入。

几乎没有

通键

键控下

软件键盘触发的事件可以得到补偿,因为当知道何时对击键进行过滤时,这仍然会导致类似的模式——即使无法测量击键的持续时间,也不会由于软件键盘的限制而导致击键的攻击速度——唯一可能的解决办法是d正在执行硬件键盘或创建一个软件键盘,为所有键发出这些事件(与默认值相反)。

GBoard

也不

SwiftKey

)我只是想知道现在刷卡打字和语音打字…因为这是物理上几乎不考虑的东西

击键

动力学。甚至留下了反馈

黑板

,因为在某些情况下,可选地发出密钥代码会有所帮助。

当处理键盘事件时,

KeyEvent

类和相关的API,您应该期望这样的键盘事件只来自硬件键盘。对于软输入方法(屏幕键盘)上的任何键,都不应依赖于接收键事件。

在使用按钮时,仍然可以使用硬件事件,而按钮会发出这些事件;例如:

/**

* Fake Hardware {@link AppCompatButton}

* @see KeyEvent

* @author Martin Zeitler

* @version 1.0.0

**/

public class FakeHardwareButton extends AppCompatButton {

private BaseInputConnection mInputConnection;

private int keyCode = KeyEvent.KEYCODE_9;

private KeyEvent keyDown;

private KeyEvent keyUp;

public FakeHardwareButton(Context context) {

this(context, null);

}

public FakeHardwareButton(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public FakeHardwareButton(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

@SuppressLint("ClickableViewAccessibility")

private void setupInputConnection(View targetView) {

this.mInputConnection = new BaseInputConnection(targetView, true);

this.keyDown = new KeyEvent(KeyEvent.ACTION_DOWN, this.keyCode);

this.keyUp = new KeyEvent(KeyEvent.ACTION_UP, this.keyCode);

this.setOnTouchListener(new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

switch(event.getAction()) {

case MotionEvent.ACTION_DOWN:

mInputConnection.sendKeyEvent(keyDown);

return true;

case MotionEvent.ACTION_UP:

mInputConnection.sendKeyEvent(keyUp);

return true;

}

return false;

}

});

}

}

问题是,

KeyEvent.KEYCODE_9

KeyEvent.KEYCODE_NUMPAD_9

是不一样的,因此人们总是要比较

String

表示数字键的情况。

android 按键 设置在哪,如何在Android设备上设置按键和按键?相关推荐

  1. 怎样设置java home_如何在Windows 7上设置java_HOME?

    如何在Windows 7上设置java_HOME? 我访问了控制面板中的"System"中的环境变量,创建了两个新变量,一个用于用户变量,一个用于系统变量.它们都被命名为JAVA_ ...

  2. android 模拟器应用未安装,当我在Android Studio中运行它时,Android应用程序未安装在模拟器或设备上...

    我正在开发Android应用程序.在我的应用程序中,我正在测试在设备和模拟器上运行的应用程序.这是我的第三个Android应用程序开发.当我开发其他应用程序时,应用程序会自动安装在设备上或模拟器上的启 ...

  3. 密钥生成并配置_如何在 CentOS 8 上设置 SSH 密钥

    本文最先发布在: 如何在 CentOS 8 上设置 SSH 密钥​www.itcoder.tech 安全 Shell (SSH) 是一个被设计用来在客户端和服务器之间进行安全连接的加密网络协议. 最流 ...

  4. apple pay 技术_如何在Apple Watch上设置和使用Apple Pay

    apple pay 技术 Thanks to the proliferation of Apple Pay compatible terminals popping up at retailers a ...

  5. 如何在 Debian 11 上设置一个静态 IP 地址

    当你在电脑上安装一个新的操作系统时,DHCP服务器会给你分配一个动态IP地址.然而,在各种情况下,你可能需要在你的机器上设置一个静态IP地址,例如,当你正在托管一个网络服务器,或者任何服务需要一个IP ...

  6. 服务器升级debian9_如何在Debian 9上设置PageKite前端服务器

    服务器升级debian9 The author selected the Open Internet/Free Speech Fund to receive a donation as part of ...

  7. Home Assistant初学者指南 -4 之 如何在Home Assistant上设置Lovelace

    Lovelace是Home Assistant的新成员.允许自定义用户界面的外观和可用性.在本文中,我将向您展示如何在Home Assistant上设置和配置Lovelace.另外,我将介绍一些可用于 ...

  8. 信道检测手机软件 ios_如何在iOS设备上用PS4或Xbox One的手柄玩游戏?

    苹果此前已经确认将在iOS 13系统中增加对PS4和Xbox One手柄的支持,玩家们可以通过蓝牙连接iOS 13的苹果设备,然后用手柄进行游戏(需要游戏本身支持,现在数量也有不少了,比如<堡垒 ...

  9. html 移动设备不显示,IT兄弟连 HTML5教程 在移动设备上设置原始大小显示

    原标题:IT兄弟连 HTML5教程 在移动设备上设置原始大小显示 在iPhone系列和iPod Touch中使用的是Safari浏览器,它支持前面介绍的媒体查询表达式.例如,使用iPhone 320p ...

  10. VSCode 同步设置及扩展插件 实现设备上设置统一

    VSCode 同步设置及扩展插件 实现设备上设置统一 准备工作:电脑上需安装VSCode,拥有一个github账户.实现同步的功能主要依赖于VSCode插件 "Settings Sync&q ...

最新文章

  1. Appium入门实例(Java)
  2. x86汇编指令具体解释
  3. JAVA期末简答题参考
  4. MFC中动态创建button及添加响应事件
  5. (09)Verilog HDL异步复位
  6. 100路监控需要使用核心交换机吗?
  7. Microsoft Office Communications Server 2007 R2 RTM 简体中文企业版部署速成篇之一
  8. mfc之CPtrArray数组
  9. 微信 for Mac 3.1.0 测试版发布,支持发朋友圈啦!
  10. unity开发文档_Unity以赞助人身份加入Blender开发基金
  11. 谷歌电子市场开发记录(2)-框架搭建
  12. 【Java代码笔记】
  13. BFS(宽度优先算法)
  14. linux查看硬盘插槽_SSD小讲堂丨自己动手丰衣足食 手把手教你安装M.2固态硬盘
  15. QPalette类详细使用方法
  16. 显示断开连接ntp服务器,ntp服务器连接异常咋办
  17. 克隆vmware虚拟机
  18. Shell脚本导出导入MySQL建表语句
  19. 统计学发展过程中有哪些主要学派?其学术观点是什么?主要代表人物及其对统计学的贡献有哪些?
  20. [渝粤教育] 西南科技大学 国际经济法 在线考试复习资料

热门文章

  1. android 百度地图自定义定位小箭头图标,并随着手机方向转动
  2. 深度学习(十三) Adversarial Attack 理论部分
  3. 51ditu:地图基础知识
  4. 入门图形学:Texture3D
  5. Lecture 4 Microphone
  6. 控制台(console)与终端(terminal)理解
  7. 绝对受用的求职经验分享
  8. 直播 | SDCC 2017 人工智能技术实战线上峰会
  9. python抓取网页数据时怎样显示进度条_Python 如何实时显示进度条?
  10. 学大数据需要具备什么基础和知识点?