onKeyDowm和onKeyUp

复制代码
 
复制代码
 1 import android.app.Activity;
 2 import android.content.Context;
 3 import android.os.Bundle;
 4 import android.view.KeyEvent;
 5 import android.view.Menu;
 6 import android.view.MenuItem;
 7 import android.widget.Button;
 8 
 9 public class MainActivity extends Activity {
10 
11     MyButton myButton;
12 
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16 
17         myButton = new MyButton(this);
18         myButton.setText("全屏按钮");
19         myButton.setTextSize(30);
20         setContentView(myButton);
21         // setContentView(R.layout.activity_main);
22     }
23 
24     class MyButton extends Button {// 自定义的Button
25 
26         public MyButton(Context context) {
27             super(context);
28             // TODO Auto-generated constructor stub
29         }
30 
31         @Override
32         public boolean onKeyDown(int keyCode, KeyEvent event) {
33             // TODO Auto-generated method stub
34             System.out.println("Button_onKeyDown" + keyCode+super.onKeyDown(keyCode, event));
35             return false;//false表示按下键时,先调用Button中的onKeyDown方法在调用activity中的onKeyDown方法                                                                                                                       
36             //return super.onKeyDown(keyCode, event);//此处也是return false;
37         }
38 
39         @Override
40         public boolean onKeyUp(int keyCode, KeyEvent event) {
41             // TODO Auto-generated method stub
42             System.out.println("Button_onKeyUp" + keyCode+super.onKeyUp(keyCode, event));
43             return false;
44             //return super.onKeyUp(keyCode, event);
45         }
46 
47     }
48     
49     @Override
50     public boolean onKeyDown(int keyCode, KeyEvent event) {
51         // TODO Auto-generated method stub
52         System.out.println("Activity_onKeyDown" + keyCode);
53         return false;
54         //return super.onKeyDown(keyCode, event);
55     }
56     @Override
57     public boolean onKeyUp(int keyCode, KeyEvent event) {
58         // TODO Auto-generated method stub
59         System.out.println("Activity_onKeyUp"+ keyCode);
60         return false;
61         //return super.onKeyUp(keyCode, event);
62     }
63 
64 }
复制代码

 

 
复制代码

结果显示如下:

 

注意:当按钮控件获得焦点时,单击手机键盘上的任意键,通过LogCat中看到的日志内容可知,此时先调用自定义的Button中的onKeyDown方法,再调用Activity中的onKeyDown方法;

  当按钮控件乜有获得焦点时,将只调用Activity中的onKeyDown方法;

  如果将MyButton类里面的onKeyDown方法由false改成true再次运行,当按钮获得焦点时单击按键,只会调用自定义的Button中的onKeyDowm方法,而不会再调用Activity中的该方法

总结:

  原型:public boolean onKeyDown(int keyCode, KeyEvent event)

    public boolean onKeyUp(int keyCode, KeyEvent event)

  参数keyCode:被按下的键值即键盘码,注意:同一个按键在不同型号的手机中的按键码可能不同;

  参数event:按键事件的对象,包含了触发事件的详细信息。当按下键时,系统会自动将事件封装成KeyEvent对象供应用程序使用。

  返回值:当返回true时,表示已经完整的处理了这个事件,并不希望其他的回调方法再次进行处理

      当返回false时,表示并没有完全处理该事件,更希望其他回调方法继续对其进行处理,例如Activity中的回调方法。

  onKeyDown和onKeyUp这两个方法是接口KeyEvent.Callback中的抽象方法,所有的View全部实现了该接口并重写了该方法。这两个事件是手机键盘事件,只针对手机键盘有效。

posted @   剑柳吟风  阅读(609)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示