Android物理键盘事件解析

 更新时间:2019年12月25日 12:14:30   作者:张三滴张呀  
这篇文章主要为大家详细介绍了Android物理键盘事件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

前言

Android设备连接物理键盘其实是个挺小众的需求,其实Android设备本身就是支持物理键盘,dispatchKeyEvent()这个方法就可以监听物理键盘,这里提供一个封装的类,解析键盘事件。有很多事件,具体可以去看KeyEvent这个类的源码,我这里只处理的数字键盘。

实现方式

1.键盘事件解析类

public class DispatchKeyResolver {

 public OnKeyInputListener keyInputListener;

 public void resolveKeyEvent(KeyEvent event) {
  getInputChar(event);
 }

 public void getInputChar(KeyEvent event) {
  int keyCode = event.getKeyCode();
  char aChar;
  if(keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) {
   //数字
   aChar = (char) ('0' + keyCode - KeyEvent.KEYCODE_0);
  } else if(keyCode >= KeyEvent.KEYCODE_NUMPAD_0 && keyCode <= KeyEvent.KEYCODE_NUMPAD_9) {
   //数字
   aChar = (char) ('0' + keyCode - KeyEvent.KEYCODE_NUMPAD_0);
  } else {
   //其他符号
   switch(keyCode) {
    case KeyEvent.KEYCODE_PERIOD:
     aChar = '.';
     break;
    case KeyEvent.KEYCODE_NUMPAD_DOT:
     aChar = '.';
     break;
    default:
     return;
   }
  }
  keyInputListener.onKeyInput(aChar);
 }

 public void setKeyInputListener(OnKeyInputListener keyInputListener) {
  this.keyInputListener = keyInputListener;
 }

 public interface OnKeyInputListener {
  void onKeyInput(char aChar);
 }
}

2.设置监听

DispatchKeyResolver dr = new DispatchKeyResolver();
 //设置事件回调
 dr.setKeyInputListener(...) 
  
 @Override
 public boolean dispatchKeyEvent(KeyEvent event) {
  //物理键确定,并且是按下的行为(避免两次响应)
  if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN){
   dr.resolveKeyEvent(event)
  }
 return super.dispatchKeyEvent(event);
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android入门之读写本地文件的实现

    Android入门之读写本地文件的实现

    这篇文章主要为大家详细介绍了Android如何实现读写本地文件的功能,文中的示例代码讲解详细,对我们学习Android有一定的帮助,需要的可以参考一下
    2022-12-12
  • Flutter 将Dio请求转发原生网络库的实现方案

    Flutter 将Dio请求转发原生网络库的实现方案

    这篇文章主要介绍了Flutter 将Dio请求转发原生网络库,需要注意添加NativeNetInterceptor,如果有多个拦截器,例如LogInterceptors等等,需要将NativeNetInterceptor放到最后,需要的朋友可以参考下
    2022-05-05
  • Android开发教程之ContentProvider数据存储

    Android开发教程之ContentProvider数据存储

    这篇文章主要介绍了Android开发教程之ContentProvider数据存储的相关资料,需要的朋友可以参考下
    2016-12-12
  • Android下拉刷新控件PullToRefresh实例解析

    Android下拉刷新控件PullToRefresh实例解析

    这篇文章主要为大家详细解析了Android下拉刷新控件PullToRefresh实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Android studio 3.0安装配置方法图文教程

    Android studio 3.0安装配置方法图文教程

    这篇文章主要为大家详细介绍了Android studio 3.0安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • android使用多线程更新ui示例分享

    android使用多线程更新ui示例分享

    在Android平台中多线程应用很广泛,在UI更新、游戏开发和耗时处理(网络通信等)等方面都需要多线程,下面是一个在线程中更新UI的代码
    2014-01-01
  • Flutter如何轻松实现动态更新ListView浅析

    Flutter如何轻松实现动态更新ListView浅析

    在Android中通常都会用到listview.那么flutter里面怎么用呢?下面这篇文章主要给大家介绍了关于Flutter如何轻松实现动态更新ListView的相关资料,需要的朋友可以参考下
    2022-02-02
  • Android 实现将Bitmap 保存到本地

    Android 实现将Bitmap 保存到本地

    这篇文章主要介绍了Android 实现将Bitmap 保存到本地,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 优化Gradle提升Gradle编译速度

    优化Gradle提升Gradle编译速度

    今天小编就为大家分享一篇关于优化Gradle提升Gradle编译速度的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • 详解Android中Handler的实现原理

    详解Android中Handler的实现原理

    这篇文章主要为大家详细介绍了Android中Handler的实现原理,本文深入分析 Android 的消息处理机制,了解 Handler 的工作原理,感兴趣的小伙伴们可以参考一下
    2016-04-04

最新评论