输入事件|Android开发系列

280 阅读2分钟

这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战

输入事件

概述

   当我们点击屏幕与应用交互时,每一次点击、长按、移动等都会产生事件,该片文章为事件分发做铺垫。

事件监听器

方法名介绍
onClick()在 View.OnClickListener 中,处理单击事件或者单击轨迹球都会触发该事件
onLongClick()在 View.OnLongClickListener 中长按事件,当长时间按住某个 View 组件时触发该事件
onFocusChange()在 View.OnFocusChangeListener 中,此接口用于处理 View 组件焦点改变事件。当用户使用导航键或轨迹球转到或离开项目时,系统会调用此方法
onKey()此接口用于对手机键盘事件进行监听,当View获得焦点并且键盘被敲击时会触发该事件,每次点击都会触发KeyEvent.ACTION_DOWNKeyEvent.ACTION_UP
onTouch()在 View.OnTouchListener 中,当用户执行可视为触摸事件的操作时,包括按下、释放或屏幕上的任何移动手势(在项目边界内),系统会调用此方法。
onCreateContextMenu()在 View.OnCreateContextMenuListener 中。当(因用户持续“长按”而)生成上下文菜单时,系统会调用此方法。
public interface OnClickListener {
    void onClick(View v);
}

public interface OnFocusChangeListener {
    void onFocusChange(View v, boolean hasFocus);
}

public interface OnLongClickListener {
    boolean onLongClick(View v);
}

public interface OnTouchListener {
    /**
    * MotionEvent内封装了
    */
    boolean onTouch(View v, MotionEvent event);
}

  从上述代码可以发现除了onClick之外均有一个boolean的返回值,返回 true 表示已处理事件且事件应就此停止;如果尚未处理事件且/或事件需要继续传递给其他任何点击监听器,则返回 false。

事件处理程序

事件处理程序也就是事件监听器里函数式接口中的方法。

  • onKeyDown(int, KeyEvent):在发生新的按键事件时调用。
  • onKeyUp(int, KeyEvent):在发生 key up 事件时调用。
  • onTrackballEvent(MotionEvent):在发生轨迹球动作事件时调用。
  • onTouchEvent(MotionEvent):在发生触屏动作事件时调用。
  • onFocusChanged(boolean, int, Rect):在 View 对象获得或失去焦点时调用,监听View焦点状态。只能在 View 中重写,当 View 组件焦点改变时被自动调用。

还有一些其他方法值得注意,尽管它们并非 View 类的一部分,但可能会直接影响所能采取的事件处理方式。

  • Activity.dispatchTouchEvent(MotionEvent):此方法允许 Activity 在所有触摸事件分派给窗口之前截获它们。
  • ViewGroup.onInterceptTouchEvent(MotionEvent):此方法允许 ViewGroup 监视分派给子级 View 的事件。
  • ViewParent.requestDisallowInterceptTouchEvent(boolean):对父级 View 调用此方法,可指示不应使用 onInterceptTouchEvent(MotionEvent) 截获触摸事件。