博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android菜鸟的成长笔记(11)——Android中的事件处理
阅读量:4955 次
发布时间:2019-06-12

本文共 3491 字,大约阅读时间需要 11 分钟。

原文:

Android提供了两种方式来处理事件,一个是基于回调的事件处理,另一个是基于监听的事件处理,举个例子:

基于回调的事件处理

@Override	public boolean onTouchEvent(MotionEvent event) {		// TODO Auto-generated method stub		return super.onTouchEvent(event);	}

基于监听的事件处理

button.setOnClickListener(new OnClickListener() {					@Override		public void onClick(View arg0) {			// TODO Auto-generated method stub						}	});

一般来说,基于回调的事件处理可用于处理一些通用性的行为,而对于某些行为只能通过监听事件处理。

一、监听事件

监听事件中,主要涉及三类对象:

EventSource(事件源):事件发生的场所,例如按钮对象。

Event(事件):事件的相关信息的封装类

EventListener(事件监听器):负责监听事件源,并对事件做出响应。

Android中的事件处理机制是一种委派式的方式,普通组件(事件源)将整个事件处理委托给特定的对象(事件监听器),当该事件源发生指定的事件时,就通知所委托的事件监听器,由事件监听器来处理这个事件。

例如:

package com.example.testlistener;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnLongClickListener;import android.widget.Button;import android.widget.EditText;public class MainActivity extends Activity {	EditText txt;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		Button bn = (Button)findViewById(R.id.bn);		txt = (EditText) findViewById(R.id.txt);		bn.setOnClickListener(new OnClickListener() {						@Override			public void onClick(View arg0) {				txt.setText("我单击了Button");			}		});				bn.setOnLongClickListener(new OnLongClickListener() {						@Override			public boolean onLongClick(View arg0) {				txt.setText("我长按了Button");				return true;			}		});	}}

二、回调事件

如果监听机制是一种委托式的事件处理,那么回调机制则恰好相反,对于基于回调的事件处理模型来说,事件源与事件监听器是同一个对象,当用户在某个组件上激发事件时,组件自己特定的方法会处理该事件。
例如:
新建一个MyButton类继承自Button
package com.example.testlistener;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.Button;public class MyButton extends Button{	public MyButton(Context context){		super(context);	}		public MyButton(Context context, AttributeSet attrs) {		super(context, attrs);		// TODO Auto-generated constructor stub	}	public MyButton(Context context, AttributeSet attrs, int defStyle) {		super(context, attrs, defStyle);		// TODO Auto-generated constructor stub	}	@Override	public boolean onTouchEvent(MotionEvent event) {		switch (event.getAction()) {		case MotionEvent.ACTION_UP:			this.setText("点击了我");			break;		default:			break;		}		return super.onTouchEvent(event);	}}
在MyButton中重写了onTouchEvent方法,这就是回调监听函数。
activity_main.xml
运行结果:

三、系统设置事件

Configuration类专门用于描述手机设备上的配置信息,这些配置信息即包括用户的特定配置也包括系统的动态设备配置。
例如:
bn.setOnClickListener(new OnClickListener() {						@Override			public void onClick(View arg0) {				txt.setText("我单击了Button");								Configuration cfg = getResources().getConfiguration();				//判断屏幕方向				String screen = 						cfg.orientation == Configuration.ORIENTATION_LANDSCAPE ? "横向屏幕":"竖向屏幕";				//手机的MNC码				String mncCode = cfg.mnc + "";								String naviName = 						cfg.orientation == Configuration.NAVIGATION_NONAV ? "没有方向控制":							cfg.orientation == Configuration.NAVIGATION_WHEEL ? "滚轮控制方向":								cfg.orientation == Configuration.NAVIGATION_DPAD? "方向键控制方向":"轨迹球控制方向";				String touchName = cfg.touchscreen == Configuration.TOUCHSCREEN_NOTOUCH ? "无触摸屏":"支持触摸屏";				System.out.println("screen = " + screen);				System.out.println("mncCode = " + mncCode);				System.out.println("naviName = " + naviName);				System.out.println("touchName = " + touchName);			}		});
运行结果:

posted on
2014-02-22 22:52 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/3561439.html

你可能感兴趣的文章
C# windows程序应用与JavaScript 程序交互实现例子
查看>>
HashMap详解
查看>>
js05-DOM对象二
查看>>
mariadb BINLOG_FORMAT = STATEMENT 异常
查看>>
C3P0 WARN: Establishing SSL connection without server's identity verification is not recommended
查看>>
iPhone在日本最牛,在中国输得最慘
查看>>
动态方法决议 和 消息转发
查看>>
WPF自定义搜索框代码分享
查看>>
js 基础拓展
查看>>
SpringBoot访问html访问不了的问题
查看>>
{width=200px;height=300px;overflow:hidden}
查看>>
C#生成随机数
查看>>
CSS基础学习 20.CSS媒体查询
查看>>
2019春季第十一周作业
查看>>
洛谷P4591 [TJOI2018]碱基序列 【KMP + dp】
查看>>
iOS CoreData介绍和使用(以及一些注意事项)
查看>>
OS笔记047代理传值和block传值
查看>>
Android应用程序与SurfaceFlinger服务的连接过程分析
查看>>
coco2dx服务器简单例子
查看>>
Java回顾之多线程
查看>>