在安卓中,有不止一种方法从你的应用截取用户交互事件。在你的用户界面中考虑事件,途径就是从用户界面中的一个指定的view对象中捕获事件。该view提供了这样作的方法。java
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
.