在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对话框组件
从零开始学android<android事件的处理方式.二十四.>,布布扣,bubuko.com
时间: 2024-10-13 01:37:34