注释一个好的文章,http://jessical08.iteye.com/blog/858772
这两个事件的返回值机值是一样的,同样是当已经完整地处理了该事件且不希望其他回调方法的再次处理时返回true,否则返回false,
返回值,该方法的返回值为一个boolean类型的变量,当返回true时,表示已经完整地处理了这个事件,并不希望其他的回调方法再次进行处理,而当返回false时,表示并没有完全处理完该事件,更希望其他回调方法继续对其进行处理,例如Activity中的回调方法。
- 8 public class Sample_7_1 extends Activity {
- 9 public final String TAG = "Sample_7_1"; /字符常量
- 10 MyButton myButton; //自定义的Button
- 11 public void onCreate(Bundle savedInstanceState) { //重写的onCreate方法
- 12 super.onCreate(savedInstanceState);
- 13 myButton = new MyButton(this); //创建一个自定义的Button
- 14 myButton.setText("全屏按钮"); //设置按钮上的文字
- 15 myButton.setTextSize(30); //设置文字的大小
- 16 setContentView(myButton); //将按钮显示出来
- 17 }
- 18 public boolean onKeyDown(int keyCode, KeyEvent event) { //重写的键盘按下监听
- 19 Log.d(TAG, "activity onKeyDown"); //打印日志
- 20 return super.onKeyDown(keyCode, event);
- 21 }
- 22 class MyButton extends Button{ //自己定义的Button
- 23 public MyButton(Context context) { //构造器
- 24 super(context);
- 25 }
- 26 public boolean onKeyDown(int keyCode, KeyEvent event){//重写的键盘按下监听
- 27 Log.d(TAG, "MyView onKeyDown"); //打印日志
- 28 return false;
- 29 }
- 20 }
- 31 }
当按钮控件获得焦点时单击手机键盘上的任意键,通过LogCat中看到的日志内容可知,此时先调用自定义的Button中的onKeyDown方法,再调用Activity中的onKeyDown方法,而当按钮控件没有获得焦点时,将只调用Activity中的onKeyDown方法,如图7-2所示。
如果将代码的第28行的false改成true再次运行,当按钮获得焦点时点击按键,只会调用自定义的Button中的onKeyDown方法,而不会再调用Activity中的该方法。
public boolean onKeyDown(int keyCode, KeyEvent msg) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {// 按下中键时触发的事件,这里android123.com.cn提醒网友G1或ADP1使用的是轨迹球,这个Trackball仍然可以按下的,不仅仅是方向的导航。
return (true);
}
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
//向左
return (true);
}
if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
//向右
return (true);
}
if(keyCode == KeyEvent.KEYCODE_DPAD_UP){
//向上
return (true);
}
if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){
//向下
return (true);
}
return super.onKeyDown(keyCode, msg);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_SEARCH){//搜索
Intent intent = new Intent(BaseActivity.this,SearchActivity.class);
intent.putExtra("isShowQuitHints", false);
startActivity(intent);
return true;
}else {
return super.onKeyDown(keyCode, event);
}
}
1 @Override 2 public boolean onKeyDown(int keyCode, KeyEvent event) { 3 // TODO Auto-generated method stub 4 5 if(keyCode==KeyEvent.KEYCODE_BACK){ 6 //弹出确定退出对话框 7 new AlertDialog.Builder(this) 8 .setTitle("退出") 9 .setMessage("确定退出吗?") 10 .setPositiveButton("确定", new DialogInterface.OnClickListener() { 11 12 @Override 13 public void onClick(DialogInterface dialog, int which) { 14 // TODO Auto-generated method stub 15 Intent exit = new Intent(Intent.ACTION_MAIN); 16 exit.addCategory(Intent.CATEGORY_HOME); 17 exit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 18 startActivity(exit); 19 System.exit(0); 20 } 21 }) 22 .setNegativeButton("取消", new DialogInterface.OnClickListener() { 23 24 @Override 25 public void onClick(DialogInterface dialog, int which) { 26 // TODO Auto-generated method stub 27 dialog.cancel(); 28 } 29 }) 30 .show(); 31 //这里不需要执行父类的点击事件,所以直接return 32 return true; 33 } 34 //继续执行父类的其他点击事件 35 return super.onKeyDown(keyCode, event); 36 }
@Override
public boolean onTouchEvent(MotionEvent event) {
final int y = (int) event.getY();
mBounceHack = false;
switch (event.getAction()) {
case MotionEvent.ACTION_UP :
if (!isVerticalScrollBarEnabled()) {
setVerticalScrollBarEnabled(true);
}
if (getFirstVisiblePosition() == 0
&& mRefreshState != REFRESHING) {
if ((mRefreshView.getBottom() >= mRefreshViewHeight || mRefreshView
.getTop() >= 0)
&& mRefreshState == RELEASE_TO_REFRESH) {
mRefreshState = REFRESHING;
prepareForRefresh();// 准备刷新
onRefresh();// 刷新
} else if (mRefreshView.getBottom() < mRefreshViewHeight
|| mRefreshView.getTop() <= 0) {
resetHeader();// 中止刷新
setSelection(1);
}
}
break;
case MotionEvent.ACTION_DOWN :
mLastMotionY = y;// 获得按下y轴位置
break;
case MotionEvent.ACTION_MOVE :
// 计算边距
applyHeaderPadding(event);
break;
}
return super.onTouchEvent(event);
}
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- int key = event.getAction();
- switch (key) {
- case MotionEvent.ACTION_UP:
- result = false;
- break;
- case MotionEvent.ACTION_DOWN:
- result = true;
- break;
- case MotionEvent.ACTION_CANCEL:
- result = true;
- break;
- case MotionEvent.ACTION_MOVE:
- if (i > 0) {
- result = false;
- }
- i++;
- break;
- default :
- result = true;
- break;
- }
- System.out.println("surface touch: " + result);
- return result;
- }
- /**按键按下触发的事件*/
- public boolean onKeyDown(int keyCode, KeyEvent event)
- {
- switch(keyCode)
- {
- case KeyEvent.KEYCODE_DPAD_CENTER:
- ShowMessage("按下:中键");break;
- case KeyEvent.KEYCODE_DPAD_UP:
- ShowMessage("按下:上方向键");break;
- case KeyEvent.KEYCODE_DPAD_DOWN:
- ShowMessage("按下:下方向键");break;
- case KeyEvent.KEYCODE_DPAD_LEFT:
- ShowMessage("按下:左方向键");break;
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- ShowMessage("按下:右方向键");break;
- }
- return super.onKeyDown(keyCode, event);
- }
- /**按键弹起所触发的事件*/
- public boolean onKeyUp(int keyCode, KeyEvent event)
- {
- switch(keyCode)
- {
- case KeyEvent.KEYCODE_DPAD_CENTER:
- ShowMessage("弹起:中键");
- break;
- case KeyEvent.KEYCODE_DPAD_DOWN:
- ShowMessage("弹起:下方向键");
- break;
- case KeyEvent.KEYCODE_DPAD_UP:
- ShowMessage("弹起:上方向键");
- break;
- case KeyEvent.KEYCODE_DPAD_LEFT:
- ShowMessage("弹起:左方向键");
- break;
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- ShowMessage("弹起:右方向键");
- break;
- }
- return super.onKeyUp(keyCode, event);
- }
- /**按键重复点击事件*/
- public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)
- {
- return onKeyMultiple(keyCode, repeatCount, event);
- }
- /**触屏事件*/
- public boolean onTouchEvent(MotionEvent event)
- {
- int action = event.getAction();
- if(action == MotionEvent.ACTION_CANCEL||action == MotionEvent.ACTION_DOWN||action == MotionEvent.ACTION_MOVE)
- {
- return false;
- }
- //得到触点的位置
- String x = String.valueOf(event.getX());
- String y = String.valueOf(event.getX());
- ShowMessage("触点坐标:(" + x + "," + y +")");
- return super.onTouchEvent(event);
- }