在android中一共有 多种事件,每种事件都有自己相对应的处理机制
如以下几种
1
|
单击事件
|
View.OnClickListener
|
public abstract void onClick (View v)
|
|
2
|
单击事件
|
View.OnLongClickListener
|
public abstract boolean onLongClick (View v)
|
|
3
|
键盘事件
|
View.OnKeyListener
|
public abstract boolean onKey (View v, int keyCode, KeyEvent event)
|
|
4
|
焦点事件
|
View.OnFocusChangeListener
|
public abstract void onFocusChange (View v, boolean hasFocus)
|
当焦点发生改变时触发
|
5
|
触摸事件
|
View.OnTouchListener
|
public abstract boolean onTouch (View v, MotionEvent event)
|
|
6
|
创建上下文菜单
|
View.OnCreateContextMenuListener
|
public abstract void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
|
当上下文菜单创建时触发
|
监听方法
1
|
public void setOnClickListener(View.OnClickListener l)
|
普通
|
|
2
|
public void setOnLongClickListener(View.OnLongClickListener l)
|
普通
|
|
3
|
public void setOnKeyListener(View.OnKeyListener l)
|
普通
|
|
4
|
public void setOnFocusChangeListener(View.OnFocusChangeListener l)
|
普通
|
|
5
|
public void setOnTouchListener(View.OnTouchListener l)
|
普通
|
|
6
|
public void setOnCreateContextMenuListener(
View.OnCreateContextMenuListener l)
|
普通
|
|
下面以Onclick单机事件为例 说明android中处理事件的三种方式
1.内部类处理事件
2.匿名内部类处理事件
3.数据源处理事件
例子如下:
XML文件
<span style="font-size:18px;"><RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="60dp" android:text="方式一" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button1" android:layout_below="@+id/button1" android:layout_marginTop="44dp" android:text="方式二" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button2" android:layout_below="@+id/button2" android:layout_marginTop="35dp" android:onClick="click" android:text="方式三" /> </RelativeLayout> </span>
JAVA文件
<span style="font-size:18px;">package com.example.actionoperator; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { public Button button1, button2, button3; // 获取BubuttonOnClickListener对象 ButtonOnClickListener click =new ButtonOnClickListener(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.activity_main); button1 = (Button) this.findViewById(R.id.button1); button2 = (Button) this.findViewById(R.id.button2); button3 = (Button) this.findViewById(R.id.button3); // 使用内部类进行处理 button1.setOnClickListener(new MyListener()); // 使用匿名内部类进行处理 button2.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "匿名内部类的方法实现方法监听处理", 2).show(); } }); // 使用数据源的方法进行处理,可以讲所有的单机事件都注册在这个click上进行处理 button3.setOnClickListener(click); } class ButtonOnClickListener implements OnClickListener { public void onClick(View v){ // 读者可以在这里设置 switch case 语句对传来参数的ID进行判断 实现多个事件的同一方法处理 if (v==button3) { Toast.makeText(MainActivity.this, "使用数据源实现方法监听处理", 2).show(); } } } class MyListener implements OnClickListener { @Override public void onClick(View view) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "内部类的方法实现方法监听处理", 2).show(); } } } </span>
最终效果
所有事件的处理方法都基本上是以上的三种处理机制,希望读者都要认真掌握
下节预报:
Dialog对话框组件