Android中的InputEventsr的简介(翻译自官方文档)——————个人笔记

本文详细介绍了Android中视图的各种事件处理机制,包括点击、长按、按键等事件的监听及处理方式,并深入探讨了焦点变化及触摸模式的管理。
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

使用requestFocus()方法来使控件获得聚焦。


参考官方文档的ui中的inputEvents


  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值