1 Android事件处理机制
Android提供了两种方式的事件处理:
- 基于监听器的事件处理
基于监听器的事件处理主要是为Android界面组件绑定特定的事件监听器; - 基于回调的事件处理
基于回调的事件处理主要是重写Android组件特定的回调函数,Android大部分界面组件都提供了事件响应的回调函数,只需要重写就可以。
2 基于监听的事件处理
与基于回调的事件处理相比,基于监听的事件处理属于更具“面向对象”性质的事件处理方式。在监听器模型中,主要涉及三类对象:
事件源(Event Source):产生事件的来源,通常是各种组件,如按钮等。
事件(Event):事件封装了界面组件上发生的特定事件的具体信息,如果监听器需要获取界面组件上所发生事件的相关信息,一般通过事件Event对象来传递。
事件监听器(Event Listener):负责监听事件源发生的事件,并对不同的事件做相应的处理。
基于监听的事件处理机制的步骤如下:
1 . 获取普通界面的组件即事件源。
布局文件中设置组件:
<Button
android:id="@+id/bt1"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="获取Ediext内容"/>
2 . 实现事件的监听器类,该监听器类是一个特殊的Java类,必须实现一个XxxListener接口。
3. 调用事件源的setXxxListener方法 将事件监听器对象注册给事件源。当事件源上发生指定事件时,Android会触发事件监听器,由事件监听器调用相应的方法来处理事件。
2.实现一个XxxListener接口,对按钮设置监听
public class MainActivity extends AppCompatActivity
implements View.OnClickListener {
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText=(EditText)findViewById(R.id.edittext1);
Button bt1=(Button)findViewById(R.id.bt1);
bt1.setOnClickListener(this);//为按钮绑定事件监听器
}
3. 实现监听器类必须实现的方法,该方法将会作为事件处理器
public void onClick(View view) {
String str=editText.getText().toString();
Toast.makeText(this,str,Toast.LENGTH_SHORT).show(); } }
3 基于回调的事件处理
相比基于监听器的事件处理模型,基于回调的事件处理模型要简单些,该模型中,事件源和事件监听器是合一的,也就是说没有独立的事件监听器存在。
当用户在GUI组件上触发某事件时,由该组件自身特定的函数负责处理该事件。通常通过重写(Override)组件类的事件处理函数实现事件的处理。
为了使用回调机制类处理GUI组件上所发生的事件,需要通过继承GUI组件类,并重写该类的事件处理方法来实现。
为了实现回调机制的事件处理,Android为所有的GUI组件都提供了一些事件处理的回调方法。
为了实现回调机制的事件处理,Android为所有的GUI组件都提供了一些事件处理的回调方法,
例如对View来说,该类包含如下方法:
⚫ boolean onKeyDown(int keycode,KeyEvent event)用户在该组件上按下某个按键时触发的方法。
参数说明:
参数keyCode,该参数为被按下的键值即键盘码,手机键盘中每个按钮都会有其单独的键盘码,在应用程序都是通过键盘码才知道用户按下的是哪个键。
参数event,该参数为按键事件的对象,其中包含了触发事件的详细信息,例如事件的状态、事件的类型、事件发生的时间等。
当用户按下按键时,系统会自动将事件封 装成KeyEvent对象供应用程序使用。
返回值,该方法的返回值为一个boolean类型的变量,当返回true时,表示已经完整地处理了这个事件,并不希望其他的回调方法再次进行处理,而当返回false时,表示并没有完全处理完该事件,更希望其他回调方法继续对其进行处理,例如Activity中的回调方法。
⚫ boolean onKeyLongPress(int keycode,KeyEvent event)用户在该组件上长按某个组件时触发的方法。
⚫ boolean onKeyUp(int keycode,KeyEvent event)用户在该组件上松开某个按键时触发的方法。