1、事件处理的概念和处理方式:
为用户动作提供响应的机制就叫做事件处理,Android有两种事件处理机制:基于回调的事件处理和基于监听的事件处理;
基于监听的事件处理:
1、监听的处理模型:
E
vent Source(事件源):事件发生的场所吗,通常指各个组件,例如按钮、窗口菜单等;
Event(事件) :事件封装了界面组件上发生的特定的事情,通常就是一次用户操作,如要获取发生的事件所有相关信息,可以通过Event对象来获取;
Event Listener(监听器) :负责监听事件源所发生的事情,并对各种事件做出响应动作;
2、基于监听的事件处理流程和编码步骤:
-->获取普通界面组件(事件源),也就是被监听的对象;
-->实现事件监听器类,该监听器是一个特殊的Java类,必须实现一个XxxxListener接口;
-->调用事件源的serXxxListener方法将事件监听器对象注册给普通组件(事件源);
当事件源上发生指定事件后,Adnroid会触发事件监听器,由事件监听器调用响应的方法(事件处理器)来处理事件;
public class MainActivity
extends Activity
{
@Override
public void OnCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState) ;
setContentView(R.attr. class) ;
// 获取应用程序中的 bn 按钮
Button bn = (Button) findViewById(R.id.bn) ;
// 找到按钮后,为这个按钮绑定一个事件监听器
bn.setOnClickListener( new MyClickListener()) ;
}
// 定义一个单击事件的监听器
class MyClickListener implements View.OnClickListener
{
// 实现监听器类必须实现的方法,作为对于按钮单击动作的响应
@Override
public void OnClick(View v)
{
EditText txt = (EditText)findViewById(R.id.txt) ;
txt.setText( "Bn button is clicked") ;
}
}
{
@Override
public void OnCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState) ;
setContentView(R.attr. class) ;
// 获取应用程序中的 bn 按钮
Button bn = (Button) findViewById(R.id.bn) ;
// 找到按钮后,为这个按钮绑定一个事件监听器
bn.setOnClickListener( new MyClickListener()) ;
}
// 定义一个单击事件的监听器
class MyClickListener implements View.OnClickListener
{
// 实现监听器类必须实现的方法,作为对于按钮单击动作的响应
@Override
public void OnClick(View v)
{
EditText txt = (EditText)findViewById(R.id.txt) ;
txt.setText( "Bn button is clicked") ;
}
}
}
3、基于监听的事件处理的规则:
-->
事件源 :就是程序中定义的
bn按钮,应用程序中任何组件都可以成为事件源;
-->
事件监听器:就是程序中的
MyClickListener类,监听器必须有我们手动实现,实现监听器类的关键就是实现处理器的方法;
-->
注册监听器:只要调用事件源的
setOnClicklistener方法即可
4、在程序中实现事件监听器有以下几种方法:
A、内部类实现监听器,如上面代码所示;
B、外部类实现监听器(比较少见);
C、Activity本身作为事件监听器类(使程序混乱);
D、匿名内部类作为事件监听器(常用);
匿名内部类作为事件监听器比起内部类实现事件监听器少了在
之后直接进行
OnClick的创建没有中间的定义事件的监听器:
基于回调的事件处理:
1、什么是回调机制:
如果事件监听机制是一种委托式的事件处理,那么回调机制则恰好相反们对于回调的事件处理模型来说事件源和事件监听器是统一的,或者说事件监听器完全小时了,当用户在GUI组件上激发某一个事件时,组件自己特定的方法将会负责处理该事件;
为了使用回调机制类处理GUI组件上所发生的事情,我们需要为该组件提供对应的事件处理方法,而JAVA又是一种静态语言,无法动态的添加方法,因此只能继承GUI组件类,并重写该类的事件处理方法来实现。
2、Android为所有GUI组件提供了一些事件处理的回调方法(已View为例):
-->
boolean onKeyDown(int keyCode,KeyEvent event):当用户在该组件上按下某个按键时触发的方法;
-->
boolean onKeyLongPress(int keyCode,KeyEvent event ):当用户在该组件下长按某个按键时触发的方法;
-->
boolean onKeyShortcut(int keyCode,KeyEvent event ):当一个键盘的快捷键事件发生时触发该方法;
-->
boolean onKeyUp(int keyCode,KeyEvent event ):当用户在某个组件上松开某个按键时触发该方法;
-->
boolean onTouchEvent(MotionEvent event):当用户在该组件上触发触摸屏事件时触发该方法;
-->
boolean onTrackballEvent(MotionEvent event ):当用户在该组件上触发轨迹球事件时触发该方法;
3、下面列举一个简单的回调事件处理:
回调事件处理机制通过自定义View来实现,自动亿View时重写该View的事件处理方法即可,
public class MyButton
extends Button
{
public MyButton(Context context , AttributeSet set)
{
super(context ,set) ;
}
@Override
public boolean onKeyDown( int KeyCode , KeyEvent event)
{
super.onKeyDown(KeyCode ,event) ;
Log. v( "-Crazeit org-" , "The onKeyDown in Button") ;
// 返回 true 表明该事件不会向外扩散
return true;
}
}
{
public MyButton(Context context , AttributeSet set)
{
super(context ,set) ;
}
@Override
public boolean onKeyDown( int KeyCode , KeyEvent event)
{
super.onKeyDown(KeyCode ,event) ;
Log. v( "-Crazeit org-" , "The onKeyDown in Button") ;
// 返回 true 表明该事件不会向外扩散
return true;
}
}
4、响应系统设置的事件:
Configuration类简介:描述手机设备上的配置信息,这写配置信息既包括用户特定的配置项,也包括系统的动态设备配置。(此项内容不做详细了解);
Handler消息传递机制:
1、Handler类的主要作用:
A、在新启动的线程中发送消息;
B、在主线程中获取、处理消息;