在 Android 的图形界面( UI )开发中,有两个非常重要的内容 ∶ 一个是控件的布局,另个就是控件的事件处理。 Android 中的常用事件有点击事件、长按事件、触摸事件、焦点事件、按键事件 — 下拉列表的选中事件、单选按钮的改变事性等。对于事件的处理,基本上可以总结为 3 个步骤 ∶ 步骤一: 获取触发事件的对象,比如点击了一个 Button ,如果要对这个点击事件进行处理,就需要获取 Button 的对象。 步骤二: 实现一个对应的事件处理接口。每个事件都有对应的事件处理接口,在事件处理中必须要实现事件处理接口,同时要实现其中的事件处理方法。在一个事件处理接口的实现类中可以处理多个事件。 步骤三: 用获取的控件对象调用该控件的某个事件监听方法,将第二步实现的接口类的对象作为参数传入,并对该事件进行注册。 点击事件 点击事件,顾名思义就是点击了某个控件而触发的事件。点击事件常见于 Button 按钮,当然, TextView 、 ImageView 等控件中也有使用。另外,布局管理器(如 LinearLayout 等)也是可以有点击事件的、下面将以 Button 与 TextView 为实例来进行讲解。 Activity 对应的布局文件代码 ∶ xml version ="1.0" encoding ="utf-8" < LinearLayout xmlns: android ="http://schemas.android.com/apk/res/android" xmlns: tools ="http://schemas.android.com/tools" android :layout_width ="match_parent" android :layout_height ="match_parent" android :orientation ="vertical" tools :context =".MainActivity" < Button android :id ="@+id/button_click" android :layout_width ="match_parent" android :layout_height ="wrap_content" android :text ="点击button按钮" < TextView android :id ="@+id/text_click" android :layout_width ="match_parent" android :layout_height ="wrap_content" android :text ="点击textView" LinearLayout MainActivity中处理的代码: 就像前 面 所说的分 3 步来处理事件 ∶ 第一步使用 findViewByld ()方法获取 Button 按钮的对象 ; 第二步让 Activity 实现点击事件的处理接口 View.OnClickListener ,并实现 onClickO )方法,在此方法中响应具体的点击事件 ; 第三步调用 setOnClickListener ()点击事件的监听方法,并将 View.OnClickListener 接口实现类的对象传入(实例中是用 Activity 实现的,所以传入了 this 对象)。 对点击事件的处理都是要在 onClick ()方法中进行编写的,实例在点击之后弹出一个 Toast 进行提示。如果只有一个点击事件,就可以直接在方法内编写响应程序,但是当实例中有两个(或多个)需要进行处理的点击事件时则需要使用一个 switch 根据它们的 id 进行判断。在第三步调用 setOnClickListener ()方法时,系统会对 View 进行注册,所以在 onClick ()方法中可以从 view.getId ()方法获取对应的 View 控件的 id 。 运行程序,点击 Button 按钮的效果如 下图所示: 点击 Button 按钮效果图 点击 TextView 按钮效果图 其实,在处理点击事件时,实现事件处理接口的方式有 3 种,实例中的处理方式是在实际开发中最常用的。下面简单介绍其他两种方式。 ( 1 )匿名内部类的方式 直接在控件对象调用 setOnClickListener ( O 方法时以匿名内部类的方式传入事件处理接口的对象。 修改 MainActivity 的代码如下: 使用这种方式就需要在 Button 按钮和 TextView 中都这样处理。如果不是两个,同时需要的 点击事件特别多,就会使得代码冗余,让 initView ()方法过于庞大,同时可读性降低。选择使用实例中的方法就会显得很清晰,同时代码简洁、可读。当然,如果需要处理的事件只有一个或者几个的话,使用此种方式会相当简单。只是在真正的开发中只有一个事件需要处理的情况相对较少,所以实例中的处理方式才是应用最广泛的。 ( 2 )内部类的方式 这种方式和匿名内部类方式不同的是,它选择在 Activity 内部创建一个内部类,并在内部类内实现 onClick ( View view )方法。 修改 MainActivity 代码如下: 使用这种方式,和实例中的方式并无区别,只是一个用 Activity 实现了事件处理接口,一个使用了内部类的方式。当然,也可以用普通类的方式,和内部类效果一样,但是在代码的内聚性上会大打折扣。当然如果遇到的工程相对复杂,那么为了解耦有时也会使用普通类的方式,不过非常少见。 只有理解了上面 3 种实现事件处理接口的方式,在开发中才能根据需要选择不同的方式。其实,不只是点击事件,其他事件实现事件处理接口也是同样的。 源码下载请关注大鸟科创空间,回复andriod studio进行下载