美文网首页
Android-事件处理与内部通信

Android-事件处理与内部通信

作者: 狼牙战士 | 来源:发表于2017-03-29 15:49 被阅读0次

    程序猿的开心一刻###

    以下谁是二进制思想的最早提出者?
    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类中,还有更多诸如OnHoverListenerOnDragListener之类的事件监听器可供使用。所以为了开发具有更加丰富功能的应用,你需要去查阅和参考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

    参考文档

    相关文章

      网友评论

          本文标题:Android-事件处理与内部通信

          本文链接:https://www.haomeiwen.com/subject/xlieottx.html