本文共 2443 字,大约阅读时间需要 8 分钟。
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 交互.转载地址:http://ctcmi.baihongyu.com/