打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android OnKeyListener接口
    OnKeyListener接口简介

       OnKeyListener是对手机键盘进行监听的接口,通过对某个View注册该监听,当View获得焦点并有键盘事件时,便会触发该接口中的回调方法。该接口中的抽象方法签名如下。

Java代码:
  1. public boolean onKey(View v, int keyCode, KeyEvent event)
复制代码

       参数v:参数v为事件的事件源控件。
       参数keyCode:参数keyCode为手机键盘的键盘码。
       参数event:参数event便为键盘事件封装类的对象,其中包含了事件的详细信息,例如发生的事件、事件的类型等。
       接下来同样通过一个简单的案例来介绍该接口的使用方法,步骤如下。

效果图:


       准备字符串资源。同样打开strings.xml文件,用下列代码替换其原有代码。

Java代码:

  1. <xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string name="textView">使用键盘中的ABCD键控制四个按钮 string>
  4. <string name="app_name">Sample<string>
  5. <resources>
复制代码

       开发主逻辑代码,打开Sample.java文件,用下列代码替代其原有代码。

Java代码:

  1. package eoe.demo;
  2. //声明所在包
  3. import android.app.Activity;
  4. //引入相关类
  5. //该处省略了部分包的引入代码,读者可自行查阅随书光盘中的源代码
  6. import android.widget.TextView;
  7. //引入相关类
  8. public class Sample extends Activity implements OnKeyListener,OnClickListener{
  9. ImageButton[] imageButtons = new ImageButton[4];
  10. //声明按钮数组
  11. TextView myTextView;
  12. //声明TextView的引用
  13. @Override
  14. public void onCreate(Bundle savedInstanceState) {
  15. //重写的onCreate方法
  16. super.onCreate(savedInstanceState);
  17. this.setContentView(R.layout.main);
  18. //设置当前显示的用户界面
  19. myTextView = (TextView) this.findViewById(R.id.myTextView);
  20. //得到myTextView的引用
  21. imageButtons[0] = (ImageButton)this.findViewById(R.id.button01);
  22. //得到button01的引用
  23. imageButtons[1] = (ImageButton) this.findViewById(R.id.button02);
  24. //得到button02的引用
  25. imageButtons[2] = (ImageButton)this.findViewById(R.id.button03);
  26. //得到button03的引用
  27. imageButtons[3] = (ImageButton)this.findViewById(R.id.button04);
  28. //得到button04的引用
  29. for(ImageButton imageButton : imageButtons){
  30. imageButton.setOnClickListener(this);
  31. //添加单击监听
  32. imageButton.setOnKeyListener(this);
  33. //添加键盘监听
  34. }
  35. }
  36. @Override
  37. public void onClick(View v) {
  38. //实现了接口中的方法
  39. if(v.getId() == R.id.button01){
  40. //改变的是button01时
  41. myTextView.setText("您点击了按钮A!");
  42. }
  43. else if(v.getId() == R.id.button02){
  44. //改变的是button02时
  45. myTextView.setText("您点击了按钮B");
  46. }
  47. else if(v.getId() == R.id.button03){
  48. //改变的是button03时
  49. myTextView.setText("您点击了按钮C");
  50. }
  51. else if(v.getId() == R.id.button04){
  52. //改变的是button04时
  53. myTextView.setText("您点击了按钮D");
  54. }
  55. else{
  56. //其他情况
  57. myTextView.setText("");
  58. }
  59. }
  60. @Override
  61. public boolean onKey(View v, int keyCode, KeyEvent event) {
  62. //键盘监听
  63. switch(keyCode){
  64. //判断键盘码
  65. case 29:
  66. //按键A
  67. imageButtons[0].performClick();
  68. //模拟单击
  69. imageButtons[0].requestFocus();
  70. //尝试使之获得焦点
  71. break;
  72. case 30:
  73. //按键B
  74. imageButtons[1].performClick();
  75. //模拟单击
  76. imageButtons[1].requestFocus();
  77. //尝试使之获得焦点
  78. break;
  79. case 31:
  80. //按键C
  81. imageButtons[2].performClick();
  82. //模拟单击
  83. imageButtons[2].requestFocus();
  84. //尝试使之获得焦点
  85. break;
  86. case 32:
  87. //按键D
  88. imageButtons[3].performClick();
  89. //模拟单击
  90. imageButtons[3].requestFocus();
  91. //尝试使之获得焦点
  92. break;
  93. }
  94. return false;
  95. }

  96. }
复制代码

       第6~7行声明TextView的引用并创建按钮数组。
       第9~21行重写了Activity的onCreate方法,在该方法中先设置当前的用户界面,然后得到各个控件的引用并为各个控件添加监听。
       第22~35行实现了接口中的onClick方法,在方法中,根据事件源的ID判断是哪个按钮被按下,然后设置myTextView的文字。
       第36~57行实现了接口中的onKey方法,在方法中,根据键盘码的不同执行不同的代码,当A键被按下时,模拟点击一下按钮0(第40行),在后尝试使该按钮获得焦点(第41行)。其他按键被按下时处理方法相同。

       此时运行该案例,观察效果如图7-13所示,当点击手机键盘上的A、B、C、D键时,相当于点击ABCD按钮。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
android 按键监听及键盘事件流(无法监听删除键)
IOS 关闭键盘 退出键盘 的5种方式
Android基础教程(一)之
Android 悬浮Activity并可拖动(访悬浮歌词)
Android Spinner的五个部分
【Android进阶】天天动听 悬浮歌词(迷你歌词)效果解读
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服