您的位置:首页 > 其它

Input Events

2016-08-12 10:08 281 查看
Android 系统提供了很多中方法和用户交互.最好的方式是捕捉和用户交互view的事件。view 类提供这种方法.

Event Listeners:

event listener 是一个可以和view class 交互的方法。用户在和UI组件交互是会触发这个UI组件注册的event listner.主要分为以下几个callback函数.

onClick():View.OnClickListener 提供的方法。当用户触摸组件或者用导航键或者轨迹球将焦点放到这个组件上,并输入enter按键或者按下轨迹球,这个函数就会被调到.没有返回值.

onLongClick():View.OnClickListener 提供的方法,当用户按住UI 组件超过1s时,就会触发这个函数.返回一个boolean 类型,true的话,表示消耗了这个event,不在在往下传递了,fasle的话,表示要继续传递这个event.

onFocusChange():View.OnFocusChangeListener 提供的方法.当UI 组件获得或者失去焦点时。返回一个boolean 类型,true的话,表示消耗了这个event,不在在往下传递了,fasle的话,表示要继续传递这个event.

onKey(): View.OnKeyListener提供的方法.组件获得焦点,然后按下或者释放设备上的硬按键时.返回一个boolean 类型,true的话,表示消耗了这个event,不在在往下传递了,fasle的话,表示要继续传递这个event.

onTouch():View.OnTouchListener提供的方法.按下,释放,或者任何的手势。返回一个boolean 类型,true的话,表示消耗了这个event,不在在往下传递了,fasle的话,表示要继续传递这个event.

onCreateContextMenu(): View.OnCreateContextMenuListener提供的方法.当绑定Context且长按时.

要使用这些event listner 一般可以直接implement 这些interface或者定义匿名class。下面是on-click的实例.

// Create an anonymous implementation of 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);

    ...

}

先new 一个匿名class,然后调用setOnClickListener 来设定event listner,这样当用户按button时就会触发mCorkyListener 中的onClick函数.

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

    }

    ...

}

也可以implement OnClickListener 然后调用setOnClickListener(this)的方式进行,效果和前一种的匿名clas实现是一样的.

Event Handlers:你可以定义一些默认的event handler。

onkeyDown(int,keyEvent):当一个新的key event产生时,被调用.

onKeyUp(int,keyEvent):key up 产生时

onTrackballEvent(MotionEvent):轨迹球移动事件产生时

onTouchEvent(MotionEvent):触摸屏幕时。

onFocusChange(boolean,int,Rect):view gains 或者失去焦点时.

下面这几个不是view class,但是可以直接影响你的handle event

Activity.dispatchTouchEvent(MotionEvent):在touch event被发送给window之前允许你的activity 和所有的touch event交互

ViewGroup.onInterceptTouchEvent(MotionEvent):允许event被发送给自view的同时允许viewgroup 查看eventViewParent.requestDisallowInterceptTouchEvent(boolean):不要和InterceptTouchEvent 交互.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: