标签:
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全部实现了该接口并重写了该方法。这两个事件是手机键盘事件,只针对手机键盘有效。
标签:
原文地址:http://www.cnblogs.com/jlyf/p/4648148.html