Event Listeners:
View.OnClickListener onClick() 点击事件
View.OnLongClickListener onLongClick() 长按事件 .
View.OnFocusChangeListener onFoucusChange() 焦点改变事件
View.OnKeyListener onKey() 在某一个控件上的按键按下或松开的事件 .
View.OnTouchListener onTouch() 在某一个控件内的触碰事件
View.OnCreateContextMenuListener onCreateContextMenu() 上下文菜单创建时调用,详见Menu文档
eg:
//实现一个OnClickListener的类
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something当点击按钮的时候。
}
};
protected void onCreate(Bundle savedValues) {
//定位Button
Button button = (Button)findViewById(R.id.corky);
//注册点击监听
button.setOnClickListener(mCorkyListener);
}
以上的方法中,其中有3个是有返回值的,如下:
onLongClick()
当返回true的时候,表示在这个方法中已经对这个事件进行了处理,而且event不会再进行传递
当返回false的时候,表示在这个方法中没有对这个事件进行处理,event会继续传递。
onKey() 同上
onTouch() 返回true,表示消费了这个事件
返回了false,表示对这个事件不感兴趣。
对于key event,系统是从根视图开始分发,直到到达目的控件,除此之外,
你还可以在Activity中的onKeyDown()和onKeyUp()方法中接收到所有的事件
Event Handlers:
在View对象中的处理事件的方法:
onKeyDown(int, KeyEvent) - Called when a new key event occurs.
onKeyUp(int, KeyEvent) - Called when a key up event occurs.
onTrackballEvent(MotionEvent) - Called when a trackball motion event occurs.
onTouchEvent(MotionEvent) - Called when a touch screen motion event occurs.
onFocusChanged(boolean, int, Rect) - Called when the view gains or loses focus.
以下几个不是在View中的方法,但是直接影响到event的传递
Activity.dispatchTouchEvent(MotionEvent)
- 可以让Activity 在事件传递到window之前,取拦截所有的触摸事件
ViewGroup.onInterceptTouchEvent(MotionEvent)
- 让ViewGroup去监听event当把事件传递到子View的时候
ViewParent.requestDisallowInterceptTouchEvent(boolean)
- 通知父View不要使用onInterceptTouchEvent(MotionEvent)方法来拦截事件。
Touch Mode:
设备是可触控时,一旦触摸屏幕,设备就会进入到Touch Mode。
在这个模式下,只有isFocusableInTouchMode()返回true的时候,控件才是focusable,例如EditText
但是返回false的时候,例如Button,就只会触发点击事件。
当使用其他的如滚动球等硬件按钮时,设备就会退出Touch Mode,这时会找到一个控件来focus。
可以通过isTouchMode()来获取当前设备的状态。
Handling Focus:
isFocusable()
setFocusable()
isFocusableInTouchMode()
setFocusableInTouchMode()
focus动作是基于一个指定方位寻找最近的算法。
在罕见的情况下,默认的算法可能会不匹配开发者的行为。在这时,可以使用以下的属性:
nextFocusDown, nextFocusLeft, nextFocusRight,nextFocusUp
使用这些属性在xml布局中来指定(我想应该是不在Touch Mode下使用的吧)
eg:
<LinearLayout
android:orientation="vertical"
... >
<Button android:id="@+id/top"
android:nextFocusUp="@+id/bottom"
... />
<Button android:id="@+id/bottom"
android:nextFocusDown="@+id/top"
... />
</LinearLayout>
使用这两个属性在布局中来指定控件的可focus性。
android:focusable
android:focusableInTouchMode
View.OnClickListener onClick() 点击事件
View.OnLongClickListener onLongClick() 长按事件 .
View.OnFocusChangeListener onFoucusChange() 焦点改变事件
View.OnKeyListener onKey() 在某一个控件上的按键按下或松开的事件 .
View.OnTouchListener onTouch() 在某一个控件内的触碰事件
View.OnCreateContextMenuListener onCreateContextMenu() 上下文菜单创建时调用,详见Menu文档
eg:
//实现一个OnClickListener的类
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something当点击按钮的时候。
}
};
protected void onCreate(Bundle savedValues) {
//定位Button
Button button = (Button)findViewById(R.id.corky);
//注册点击监听
button.setOnClickListener(mCorkyListener);
}
以上的方法中,其中有3个是有返回值的,如下:
onLongClick()
当返回true的时候,表示在这个方法中已经对这个事件进行了处理,而且event不会再进行传递
当返回false的时候,表示在这个方法中没有对这个事件进行处理,event会继续传递。
onKey() 同上
onTouch() 返回true,表示消费了这个事件
返回了false,表示对这个事件不感兴趣。
对于key event,系统是从根视图开始分发,直到到达目的控件,除此之外,
你还可以在Activity中的onKeyDown()和onKeyUp()方法中接收到所有的事件
Event Handlers:
在View对象中的处理事件的方法:
onKeyDown(int, KeyEvent) - Called when a new key event occurs.
onKeyUp(int, KeyEvent) - Called when a key up event occurs.
onTrackballEvent(MotionEvent) - Called when a trackball motion event occurs.
onTouchEvent(MotionEvent) - Called when a touch screen motion event occurs.
onFocusChanged(boolean, int, Rect) - Called when the view gains or loses focus.
以下几个不是在View中的方法,但是直接影响到event的传递
Activity.dispatchTouchEvent(MotionEvent)
- 可以让Activity 在事件传递到window之前,取拦截所有的触摸事件
ViewGroup.onInterceptTouchEvent(MotionEvent)
- 让ViewGroup去监听event当把事件传递到子View的时候
ViewParent.requestDisallowInterceptTouchEvent(boolean)
- 通知父View不要使用onInterceptTouchEvent(MotionEvent)方法来拦截事件。
Touch Mode:
设备是可触控时,一旦触摸屏幕,设备就会进入到Touch Mode。
在这个模式下,只有isFocusableInTouchMode()返回true的时候,控件才是focusable,例如EditText
但是返回false的时候,例如Button,就只会触发点击事件。
当使用其他的如滚动球等硬件按钮时,设备就会退出Touch Mode,这时会找到一个控件来focus。
可以通过isTouchMode()来获取当前设备的状态。
Handling Focus:
isFocusable()
setFocusable()
isFocusableInTouchMode()
setFocusableInTouchMode()
focus动作是基于一个指定方位寻找最近的算法。
在罕见的情况下,默认的算法可能会不匹配开发者的行为。在这时,可以使用以下的属性:
nextFocusDown, nextFocusLeft, nextFocusRight,nextFocusUp
使用这些属性在xml布局中来指定(我想应该是不在Touch Mode下使用的吧)
eg:
<LinearLayout
android:orientation="vertical"
... >
<Button android:id="@+id/top"
android:nextFocusUp="@+id/bottom"
... />
<Button android:id="@+id/bottom"
android:nextFocusDown="@+id/top"
... />
</LinearLayout>
使用这两个属性在布局中来指定控件的可focus性。
android:focusable
android:focusableInTouchMode
参考官方文档的ui中的inputEvents