程序猿的开心一刻###
以下谁是二进制思想的最早提出者?
a,伏羲;b,姬昌;c,莱布尼茨;d,柏拉图。
请在评论区输入答案,接下来进入正题
一、简介
本文将带你学习Android中最基本的事件处理机制,了解什么是事件,怎样来监听事件。随后你将学习到什么是意图,以及通过一个实例来学习怎样用意图在Activity间传递信息。
知识点
- Android事件监听器
- Android事件处理者
- 事件监听器的注册
- 在Activity之间传递数据
二、事件处理
对于应用的交互而言,事件是一个收集用户交互信息的有效途径。这些事件包括按压按钮或者触碰屏幕。Android的框架维护了一个基于先进先出的事件队列,你可以在程序中捕获这些事件,并针对每个需求,采取合适的行动。
下面有三个关于Android事件管理的概念:
-
事件监听器
:事件监听器是View类中的一个接口,它包含了一个回调方法。当用户与UI组件进行交互时,相应已注册的监听器会被触发,Android框架会调用这些方法。 -
事件监听器注册
:事件注册就是一个事件处理者通过事件监听器来注册的过程。因此,事件监听器触发事件时调用响应的处理者(Handler
)。 -
事件处理者
:当某个事件发生时,如果我们为该事件注册了一个事件监听器,那么这个监听器就会调用事件处理者。后者为实际处理该事件的方法。
1. 事件监听器和事件处理者
以下为一些常见的事件处理者,后面补充了它对应的事件监听器和说明。
-
onClick()
:对应的事件监听器是OnClickListener()
。当用户点击、触摸或者聚焦(给它焦点)与任何一个部件时(这些部件有按钮、文本和图片等),该方法就会被调用。你可以使用名为onCLick()
的事件处理者来处理这些事件。 -
onLongClick()
:对应的事件监听器是OnLongClickListener()
。当用户长时间(一秒或者很多秒)点击、触摸或聚焦于任何一个部件时,该方法会被调用。你可以使用名为onLongClick()
的事件处理者来处理这些事件。 -
onFocusChange()
:对应的事件监听器是OnFocusChangeListener()
。有时当用户从某个视图部件上移开关注时,这个部件就会失去焦点,此时该方法会被调用。你可以使用onFocusChange()
这个事件处理者来处理这些事件。 -
onKey()
:对应的事件监听器是OnFocusChangeListener
。当用户关注某个部件并且按压(或释放)了设备上的实体按键时,该方法会被调用。你可以使用onKey()
事件处理者来处理这个事件。 -
onTouch()
:对应的事件监听器是OnTouchListener()
。当用户按键、释放按键或者在屏幕上任意移动手势时,会调用该方法。你可以使用onTouch()
事件处理者来处理这个事件。 -
onMenuItemClick
:对应的事件监听器是onMenuItemCLickListener()
。当用户选择了一个菜单项时会调用该方法。你可以使用onMenuItemCLick()
事件处理者来处理这个事件。 -
onCreateContextMenu()
:对应的事件监听器是OnCreateContextMenuItemListener()
。当上下文菜单正在建立时(持续的长按动作会触发该事件)会调用该方法。
在View
类中,还有更多诸如OnHoverListener
、OnDragListener
之类的事件监听器可供使用。所以为了开发具有更加丰富功能的应用,你需要去查阅和参考Android开发的官方文档。
2. 事件监听器注册
前文提到过,事件的注册就是一个事件处理者注册事件监听器的过程。尽管对于注册监听器来说,有许多灵活的方法,但在本文中只列出了其中最常用的3种方法。在你的实际项目中,可以任意使用其中之一。
这些方法有:
- 使用匿名内部类
- 在
Activity
类中实现Listener
的接口。 - 在
activity_main.xml
(对应的)布局文件中直接通过android:onClick
属性指定事件处理者。
下面的内容将为你逐一讲解。
(1)使用匿名内部类注册事件监听器
以按钮的点击事件为例,首先要在xml布局文件中定义按钮的id,然后在Activity类中实例化控件,使用自定义的内部类,如下所示:
public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 此处写其他代码
// button是查找后赋值的按钮对象
button.setOnClickListener(new MyOnClickListener();
}
// 自定义的匿名内部类
Private final class MyOnClickListener implements OnClickListener{
Public void onClick(View view){
// 此处写点击功能的逻辑
}
}
}
(2)实现事件监听器接口
这种方法是让当前Activity实现OnClickListener
,并实现这个接口中的方法:onClick(View view)
:
public class MainActivity extends Activity implements OnClickListener{
// 当然这儿应该还有该类中的其他内容
@Override
Public void onClick(View view){
// 此处填实现的细节
}
}
(3)在布局文件中指定事件处理者
以按钮的点击事件为例,这种方法是在xml布局文件中,在控件属性里添加android:onClick
属性,然后指明调用方法的名字,例如android:onClick="onAddClick"
。
在对应的Activity类中,也需要写一个对应的方法,方法名要与之对应,如:
public void onAddClick(View view){
//这里填具体的逻辑
}
3. 触碰模式
用户可以通过实体按键、屏幕上的按钮,以及触摸屏幕来和设备交互。触摸屏幕能让设备进入触碰模式,用户可以通过屏幕上的虚拟按钮、图片来完成交互。你可以通过调用View
类的isInTouchMode()
方法来检查设备是否处于触碰模式。
这个流程图如下所示:
演示.gif
网友评论