首页 > 代码库 > 从零开始学android<android事件的处理方式.二十四.>

从零开始学android<android事件的处理方式.二十四.>

在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对话框组件