public class MyButton extends Button{public MyButton(Context context , AttributeSet set){super(context , set);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event){super.onKeyDown(keyCode , event);Log.v("-MyButton-" , "the onKeyDown in MyButton");//返回false,表明并未完全处理该事件,该事件依然向外扩散return false;}}
public class Propagation extends Activity{@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);MyButton bn = (MyButton)findViewById(R.id.bn);//bn.setFocusable(true);bn.requestFocus();bn.setFocusableInTouchMode(true);//为bn绑定事件监听器bn.setOnKeyListener(new OnKeyListener(){@Overridepublic boolean onKey(View source, int keyCode, KeyEvent event){//只处理按下键的事件if (event.getAction() == KeyEvent.ACTION_DOWN){Log.v("-Listener-" , "the onKeyDown in Listener");}// 返回false,表明该事件会向外传播return false;}});}//重写onKeyDown方法,该方法可监听它所包含的所有组件的按键被按下事件@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event){super.onKeyDown(keyCode , event);Log.v("-Activity-" , "the onKeyDown in Activity");//返回false,表明并未完全处理该事件,该事件依然向外扩散return false;}}

原文:http://www.cnblogs.com/fruitbolgs/p/4160862.html