在安卓中,有不止一种方法从你的应用截取用户交互事件。在你的用户界面中考虑事件,途径就是从用户界面中的一个指定的view对象中捕获事件。该view提供了这样做的方法。
onClick()来自View.OnClickListener.。当用户触摸该item(触摸模式下),或者使用导航键或轨迹球使焦点聚集在该项上并且按下了适当的"enter"(进入)按键或者在轨迹球上执行了按下操作。onLongClick()来自 View.OnLongClickListener.。当用户持续触摸item时(触摸模式下),或者使用导航键或轨迹球使焦点聚集在该项上并且持续按着适当的"enter"(进入)按键或者在轨迹球上执行持续按下操作(持续一秒)。onFocusChange()来自 View.OnFocusChangeListener 当用户使用导航键或者轨迹球导航到或者离开该item 时。onKey()来自View.OnKeyListener. 当用户聚焦在了项目上并且按下或松开设备上的按键时onTouch()来自View.OnTouchListener.当用户执行一个合格的触摸操作,包括按下,释放或者任何屏幕上的手势动作(在项目的边界内)onCreateContextMenu()来自View.OnCreateContextMenuListener. 当上下文菜单开始构建时调用(如持续“长按”的结果)。查看在 Menus开发向导中关于上下文菜单的讨论。// 为OnClickListener创建一个匿名实例private OnClickListener mCorkyListener = new OnClickListener() { public void onClick(View v) { // do something when the button is clicked }}; protected void onCreate(Bundle savedValues) { ... // Capture our button from layout Button button = (Button)findViewById(R.id.corky); // Register the onClick listener with the implementation above button.setOnClickListener(mCorkyListener); ...}public class ExampleActivity extends Activity implements OnClickListener { protected void onCreate(Bundle savedValues) { ... Button button = (Button)findViewById(R.id.corky); button.setOnClickListener(this); } // Implement the OnClickListener callback public void onClick(View v) { // do something when the button is clicked } ...}onClick() 回调并没有返回值,但是一些其它的事件处理方法必须返回一个布尔类型。原因取决于事件。这里有少数的一些原因:onLongClick() - 该方法返回一个布尔类型来指明你是否消耗了该事件,并且它不应该进一步传递下去。也就是说,返回true表明你处理了该事件并且它应该在这停下来;返回false,如果你没有处理它或者该事件应该继续传递给其它on-click监听者。onKey() - 该方法返回一个布尔类型来表明你是否消耗了该事件并且不应该进一步传递下去。也就是说,返回true表明你处理了该事件并且它应该在这停下来;返回false,如果你没有处理它或者该事件应该继续传递给其它on-click监听者。onTouch() - 该方法返回一个布尔类型来表明你是否消耗了该事件。重要的是该事件可以有多个符合触发条件的操作。因此,当按下事件被接受到,如果你返回了false,表明你没有处理该事件并且对这个事件的后续行动不感兴趣。因此,你不会为每一个操作都调用该事件,如手势动作,或者最后的抬手动作(up action event)。onKeyDown() 和onKeyUp().内收到各种事件。onKeyDown(int, KeyEvent) - 当一个新的按键事件发生时调用onKeyUp(int, KeyEvent) - 当一个按键松开(key up )事件发生时调用onTrackballEvent(MotionEvent) - 当一个轨迹球运动事件发生时onTouchEvent(MotionEvent) - 当一个屏幕触摸事件发生时onFocusChanged(boolean, int, Rect) - 当该view获得或失去焦点时Activity.dispatchTouchEvent(MotionEvent) -允许你的activity拦截所有的触摸事件,在他们分发给window之前。ViewGroup.onInterceptTouchEvent(MotionEvent) - 允许一个viewgroup 来观察事件是否派遣给了子view。ViewParent.requestDisallowInterceptTouchEvent(boolean) -调用该方法取决于父视图,表明它不应该通过onInterceptTouchEvent(MotionEvent).拦截触摸事件。isInTouchMode() 来查看设备当前是否处于触摸模式。setFocusableInTouchMode()你可以改变它。<LinearLayout android:orientation="vertical" ... > <Button android:id="@+id/top" android:nextFocusUp="@+id/bottom" ... /> <Button android:id="@+id/bottom" android:nextFocusDown="@+id/top" ... /></LinearLayout>android:focusable xml属性,在你的布局文件中声明。设置该值为true。你也可以声明该view的可聚焦性,当在触摸模式时通过android:focusableInTouchMode.原文:http://www.cnblogs.com/android-blogs/p/5703236.html