Handling UI Events/处理事件

一、View对像中有一堆事件回调接口。例如View.OnClickListener、View.OnLongClickListener……。你需要监听事件时,只需要把实现事件回调接口的实例传入view实例的setOnXXXListener即可。

 

二、事件是一个从最外层分发,然后下沉到目标view的过程。事件到达目标view时,是先调用自定义的事件处理器,再调用默认的事件处理器。如果你的事件处事器返回true,即事件的分发过程立即终止,默认事件处理器也不会被调用。

 

三、关于事件的其它接口。Activity.dispatchTouchEvent(MotionEvent):可以拦截所有的touch Event。ViewGroup.onInterceptTouchEvent(MotionEvent):许允ViewGroup去查看分发到view的事件。

 

四、touch mode。当用户通过方向键或轨迹球在界面中游走时,界面会自动让可操作控件获得焦点(高亮显视)。这样可以让用户知道哪里可以操作。然而,当用户直接使用触摸屏操作时,上面说的自动获取焦点(高亮显视)就没必要了。这种经过控件而不高亮显视控件的模式叫touch mode。

 

五、具有触摸功能的设备,一旦用户触碰到屏幕,设备立即进入touch mode。这里只有isFocusableInTouchMode()返回true的组件才会获得焦点(例如文字编辑类控件)。其余的控件只会触发onclick事件。

 

六、当用户点击方向键或轨迹球时,系统会退出touch mode,然后找一个最近的控件,让它获得焦点。

 

七、可以用view.isInTouchMode去判断系统是否在touch mode。

 

八、handling focus/处理焦点。可以通过setFocusable、setFocusableInTouchMode设置控件在不同模式下是否可以获得焦点。在获取焦点顺序上,androud采用某方向上最近距离的原则让焦点随用户的操作而移动。另外开发人员也可以通过设置view的nextFocusDown、nextFocusLeft等四个方法来设置获取焦点的顺序。要让某view获得焦点,可以调用requestFocus()方法。

你可能感兴趣的:(UI)