Android事件处理

Android 的事件处理机制 Android 提供了两种方式的事件处理机制:<1> 基于监听的事件处理; <2> 基于回调的事件处理。 (说明:事件处理就是为用户动作提供响应的机制) 一、基于监听的事件处理 1、两种方式 (1)为 Android 界面组件绑定特定的事件监听器; (2)在界面布局文件中,为 UI 组件的 android:onClick 属性指定事件监听方法。(注:该方式需要在 Activity 中定义该事件监听方法) 2、事件监听处理模型 (1)涉及三类对象: Event Source(事件源) 阅读详情

Android事件处理通常和控件相结合,通常有以下几种事件处理模型:

  • (一)事件监听的处理模型
public voidonCreate(Bundle savedInstanceState)
{
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         Button bn =(Button)findViewById(R.id.bn);
         bn.setOnClickListener( newMyClickListener() );
}
class MyClickListenerimplements View.OnClickListener
{
         @override
         public void onClick(View arg0)
         {
                   EditText txt =(EditText)findViewById(R.id.txt);
                   Txt.setText(“bn 被单击了!”);
         }
}

基于监听的事件处理模型步骤如下:

  1. 获取组件(事件源),也就是被监听的对象
  2. 实现事件监听器类,该类是一个特殊的Java类,必须实现一个XxxListener接口
  3. 调用事件源的setXxxListener方法将事件监听器对象注册给事件源
  • (二)基于回调的事件处理

为了实现回调机制的事件处理,Android为所有GUI组件提供了一些事件处理方法,以View为例,该类包含如下方法

  1. boolean onKeyDown(int keyCode, KeyEvent event)
  2. boolean onKeyLongPress(int keyCode, KeyEvent event)
  3. boolean onKeyShortCut(int keyCode, KeyEvent event)
  4. boolean onKeyUp(int keyCode, KeyEvent event)
  5. boolean onTouchEvent(MotionEvent event)
  6. boolean onTrackballEvent(MotionEvent event)

所有基于回调的处理方法都有一个boolean类型的返回值,该返回值用于标识该处理方法是否能完全处理该事件

  1. 如果返回true,表明该处理方法已完全处理该事件,该事件不会传播出去
  2. 如果返回false,表明该处理方法并未完全处理该事件,该事件会传播出去
  • (三)响应的系统设置的事件

程序可调用Activity的如下方法获取系统的Configuration对象:

Configuration cfg = getResources().getConfiguration();

一旦获得了系统的Configuration对象,便可获得如下系统的配置信息

  1. public float fontScale                         设置字体的缩放因子
  2. public int keyboard                             设置所关联的键盘类型:KEYBOARD_NOKEYS、KEYBOARD_QWERTY(普通电脑键盘)、KEYBOARD_12KEY(只有12个键的小键盘)
  3. public int keyboardHidden                只有硬件键盘和软键盘都不可用时才返回KEYBOARDHIDDEN_YES,否则返回KEYBOARDHIDDEN_NO
  4. public Locale locale                           获取当前的Locale
  5. public int mcc                                        获取移动信号的国家码
  6. public int mnc                                       获取移动信号的网络码
  7. public int navigation                            判断导航设备的类型:NAVIGATION_NONAV(无导航),NAVIGATION_DPAD(DPAD导航),NAVIGATION_TRACKBALL(轨迹球导航),NAVIGATION_WHEEL(滚轮导航)
  8. public int orientation                          获取系统屏幕的方向:ORIENTATION_LANDSCAPE(横向屏幕),ORIENTATION_PORTRAIT(竖向屏幕),ORIENTATION_SQUARE(方形屏幕)
  9. public int touchscreen                        系统触摸屏的触摸方式:TOUCHSCREEN_NOTOUCH、TOUCHSCREEN_STYLUS(触摸笔式触摸屏)、TOUCHSCREEN_FINGER
  • (四)Handler消息传递机制

Handler类包含如下方法用于发送、处理消息

  1. void handleMessage(Message msg)
  2. final boolean hasMessages(int what)
  3. final boolean hasMessages(int what, Object object)
  4. Message obtainMessage()
  5. sendEmptyMessage(int what)
  6. final boolean sendEmptyMessageDelayed(int what, long delayMillis)
  7. final boolean sendMessage (Message msg)
  8. final boolean sendMessageDelayed(Message msg, long delayMillis)

使用实例:

		final Handler myHandler = new Handler()
		{
			@Override
			public void handleMessage(Message msg)
			{
				if (msg.what == 0x1222)
				{
					doSomething();
				}
			}
		};
		//定义一个计时器,让该计时器周期性地执行指定任务
		new Timer().schedule(new TimerTask()
		{
			@Override
			public void run()
			{
				//新启动的线程无法访问该Activity里的组件
				//所以需要通过Handler发送信息
				Message msg = new Message();
				msg.what = 0x1222;
				//发送消息
				myHandler.sendMessage(msg);
			}
		}, 0 , 2*1000);
  • (五)使用手势

(先在AVD中用GestureBuilder创建手势,然后导出至/res/raw中)

		library = GestureLibraries.fromRawResource(this, R.raw.gestures);
		if( !library.load() ){
			finish();
		}
		GestureOverlayView gesture = (GestureOverlayView)findViewById(R.id.gesture);
		gesture.addOnGesturePerformedListener(this);

	@Override
	public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
		// TODO Auto-generated method stub
		ArrayList<Prediction> gestures = library.recognize(gesture);	//获取全部预测结果
		int index = 0;
		double score = 0.0;
		for(int i = 0; i < gestures.size(); ++i){
			Prediction result = gestures.get(i);
			if(result.score > score){
				index = i;
				score = result.score;
			}
		}
		Toast.makeText(this, gestures.get(index).name, Toast.LENGTH_LONG).show();
	}

加Android进阶群 4112676,可免费或许Android进阶资料哦

安卓——添加事件处理EventHandle 事件处理有三种方法: 基于监听的方法 基于回调的方法 重写onClick方法 #主页面的XML文件,点击不同按钮展示不同的情况 <?xml version="1.0" encoding="utf-8"?> <net.onest.eventhandlech0301.MyLinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:or 阅读详情

相关推荐

Ubuntu 20.04 server 安装

Ubuntu 20.04 server 安装 前面我们介绍了 Ubuntu Desktop 版本的安装,今天我们来看看 Ubuntu server 版本的安装。Ubuntu Server 版本的安装和 Desktop 有很大的区别,并且全程不能使用鼠标,只能通过键盘。 从光盘或 U 盘启动到 Welcome 界面,选择语言,一般都是使用 English,所以保保持默认,直接按回车即可; 系统检测到了新的版本,问你是否是否更新,这里我们不需要安装新的版本,所以选项 Continue without upda

as900的博客 1万+

Handler.Callback 返回值

/** * Callback interface you can use when instantiating a Handler to avoid * having to implement your own subclass of Handler. * * @param msg A {@link android.os.Message Message} ...

yikunhan的博客 5016

手把手教你用TP4056和PMOS管搭建锂电池自动切换电路(含元器件选型指南)

本文详细介绍了如何使用TP4056和PMOS管搭建锂电池自动切换电路,包括核心架构设计、元器件选型指南和PCB布局优化。通过智能充电算法和电源路径切换模块,实现外部供电与锂电池的无缝切换,提升便携式设备的电源管理效率。

julia4scientist的博客 887

Android Handler消息处理机制详解

前言 从我们学习android开始,几乎每天都在和handler打交道.有了它,我们在子线程中处理好了耗时的操作,可以利用它来更新UI.它为我们在线程间的通信提供了很大的方便,而今天博客就来详细的介绍一下Handler的消息循环机制,一步一步的了解其中的奥妙,本文不介绍Handler的详细使用,探究的是内部的原理.所以看这篇博客的童鞋需要有handler的基本使用能力 先抛出一个简单的

小金子的专栏 1万+

【毕业设计参考】基于yolov8+pyqt5自适应界面设计的锂电池表面缺陷检测系统

基于YOLOv8+PyQt5的锂电池表面缺陷检测系统结合了先进的目标检测技术与友好的用户界面设计,为锂电池质量检测提供了一种高效、准确的解决方案。未来,随着深度学习技术的不断发展,我们可以进一步优化模型,提高检测精度和速度,同时拓展系统功能,如实现实时视频流检测、与生产系统的深度集成等,为锂电池产业的发展注入新的活力。希望本文对大家在相关领域的研究和实践有所帮助,欢迎大家在评论区交流讨论。

1182

用STM32F407做个USB声卡:从CubeMX配置到播放录音全功能实战(附源码)

本文详细介绍了如何使用STM32F407开发板实现USB音频设备的全功能实战,包括CubeMX配置、硬件连接、音频流处理和性能优化。通过双缓冲DMA机制和音频数据处理流程,开发者可以构建高质量的USB声卡系统,适用于录音和播放场景。附源码,助力快速上手STM32音频开发。

weixin_30301449的博客 516

深入理解Handler、Message、MessageQueue、Looper

本文是从源码的角度对andorid异步消息处理机制的梳理,那么在文章开始阶段,先简单介绍,异步消息处理机制中各部件的作用以及处理处理机制的概述1、Handler、Message、MessageQueue、Looper功能简述Handler负责消息处理,包括消息的发送和消息的接收,内部跟Looper有关联。Message是消息的载体,里面封装了消息的具体内容MessageQueue是消息列表,存在着...

宵待草夜情 7204

VirtualBox虚拟机上ubuntu系统安装问题记:显示画面太小、启动就异常退出等

报错:Failed to load R0 module D:/VMMR0.r0: The path is not clean of leading double slashes: ‘D:/VMMR0.r0’ (VERR_SUPLIB_PATH_NOT_CLEAN).解决方法特别简单,就是安装VIrtualBox的时候不要安装在CDE等盘根目录下。首先VirtualBox的下载安装过程是比较简单的,此处就不赘述了。然后E盘下新建个目录,安装到这个目录下就可解决。

qq_42595610的博客 2825

安卓基础学习_Android事件处理

一、基于监听事件处理 1.内部类作为事件监听器类, 2.外部类作为事件监听器类。 3.Activity本身作为事件监听器。 4.匿名内部类作为事件监听器。 5.直接绑定到标签 // 获取应用程序中的bn按钮 Button bn = (Button) findViewById(R.id.bn); // 为按钮绑定事件监听器。 bn.setOnClickListener(new

On The Way 917

【动态规划】背包问题(详细总结,很全)

暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化!背包问题是动态规划(Dynamic Planning) 里的非常重要的一部分,关于几种常见的背包,其关系如下:在解决背包问题的时候,我们通常都是按照如下五部来逐步分析,把这五部都搞透了,算是对动规来理解深入了。二维dp数组01背包,先遍历物品还是先遍历背包都是可以的,且第二层for循环是从小到大遍历一维dp数组01背包,只能先遍历物品再遍历背包容量,且第二层for循环是从大到小遍历。求组合数:外层遍历物品,内层遍历背包。

m0_51370744的博客 4万+

Android Telephony主要模块及功能

Telephony的代码主要由五个模块组成 1.Telephony Frameworks 代码区域: frameworks/opt/telephony/ 其中主要的文件在如下目录 /frameworks/opt/telephony/src/java/com/android/internal/telephony/ 其中比较常见的有以下几类文件 1.BaseCommands、RIL构成R

泊客 7720

Android移动开发之【通往安卓的神奇之旅】基于回调的事件处理

文章目录1 Android中的事件处理方法2 基于回调的事件处理机制详解 1 Android中的事件处理方法 事件处理:响应用户UI动作,提高应用程序交互性 1、基于监听的事件处理机制 2、基于回调的事件处理机制 3、Handler消息处理 2 基于回调的事件处理机制详解 1、回调事件处理原理 监听事件处理是事件源与事件监听器分开的 而基于回调的事件处理UI组件不但是事件源,而且还是事件监听器,通过组件的相关回调方法处理对应的事件 2、回调事件应用步骤 Ⅰ. 自定义View类,继承自需要的View

NJU phd 在读。 769

YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度

ASF-YOLO是一种基于YOLO的新颖框架,结合了空间和尺度特征以实现准确和快速的分割。其中,注意力尺度序列融合模块。

Limiiiing的博客 4389

安卓开发之事件处理机制

从这节开始慢慢接触自定义View的相关知识,包括View的事件体系以及View的工作原理等等。这次主要来学习一下安卓的事件处理机制,作为学习自定义View的前奏,能对之后理解自定义View有所帮助。 所谓的事件包括系统事件和用户事件,用户事件就是指用户发出的可被识别的操作,例如用户按下按钮、点击屏幕等,系统事件则是由系统激发,例如定时器等等。事件被激发后需要被分发然后处理,这里我们先不用考虑事件的分发机制是怎样的,Android中支持两种事件处理机制:基于监听的事件处理机制和基于回调的事件处理机制。 参考菜

iris的博客 1219

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【安卓学习笔记】安卓的事件处理

最最简单的一个例子就是Activity的onCreate()方法,当我们初始化一个Activity类的时候,就会调用这个方法,如果我们不重写这个方法,那么程序就会调用默认的onCreate()方法,如果我们重写了这个方法,那么程序就会调用我们重写的onCreate()方法。回调这个词在编程领域经常被提及,我的理解是,回调实际上是某个类中早已经定义好的方法或者接口,当我们继承或者实现接口的时候,可以相应地重写对应方法,或者实现相应接口。程序会周期性地变换显示的图片。

haohulala的博客 1437

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

安卓事件处理机制

安卓事件处理

m0_74381746的博客 364

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

一张图让你了解安卓事件处理流程的走向

最近小明遇到问题老是问我,其中有一个问题是这样的: 小明:在ScrollView嵌套ListView,ListView无非滑动 一看就知道他不懂安卓事件处理机制,然后我耐心帮他讲解,最后虽然他懂了,但是我还是觉得有必要总结下安卓事件处理机制。 一.什么是事件 事件就是对触摸屏幕的操作,比如触摸事件,单机事件,滑动事件等。 用户对触摸屏幕的所有操作,都是先按下去,最后弹起来,按下去

Jesse_xjq的博客 3387

【Android基础】事件处理

介绍 与界面编程紧密相关的就是事件处理了,当用户在程序界面执行各种操作时,应用程序需要为用户动作提供响应动作,这种响应动作需要通过事件处理来完成。 Android提供了两种方式的事件处理: 基于回调的事件处理:主要做法是重写Android组件特定的回调方法,或重写Activity的回调方法 基于监听器的事件处理:主要做法是为Android界面组件绑定特定的事件监听器。(android为绝大部分界面组件提供了事件响应的回调方法,开发者只需要重写它们) 基于监听的事件处理 事件监听的处理模型

kuangd_1992的博客 5005

Android 事件处理

Android 事件处理 安卓对于各种事件如单击、长按等均提供了相应的触发方法或监听方法。 文章目录Android 事件处理1. 事件处理2. 单击事件3. 物理按键事件4. 触摸事件5. 长按事件 1. 事件处理 基本流程如下图: 有两种事件处理方式: 基于监听 <View>.setOnXXXListener(View.OnXXXListener l) 常见:监听点击事件 基于回调 事件触发时调用的方法。 在Activity中重写相应方法,常见:onTouchEvent,onKeyD

Teolih的博客 1081

android 事件处理作用,Android事件处理

事件是一种有用来收集用户与应用程序互动数据的互动组件,如按键或触摸屏等放置事件,因为每个事件从Android框架维护事件队列先入先出(FIFO)基础上的队列。可以在程序中捕获这些事件,按要求并采取适当的动作。有以下三个概念涉及到Android事件管理:事件监听器:主要涉及建立一个Android的GUI视图类,View类提供了一些事件监听器。事件监听器是对象接收通知在事件发生时。事件监听器注册:...

weixin_42299066的博客 279

安卓开发学习12-1:Android事件处理和手势:事件处理概述

两种事件处理基于监听的事件处理三个事件处理相关的对象事件处理流程实例基于回调的事件处理两种方式几个重写方法应用场景 两种事件处理 基于监听的事件处理 基于回调的事件处理 基于监听的事件处理 为UI组件绑定特定的监听器,例如按钮监听点击 三个事件处理相关的对象 该事件处理构成包括三个对象:事件源、事件监听器、事件 事件源:例如按钮之类的,触发事件的对象 事件监听器::为事件源添加事件监听器,例如设置点击事件监听器 事件:在事件监听器中添加监听事件,例如设置了点击事件监听器,那么就可以监听点击事件 .

qq_43967413的博客 506

关于Android的几种事件处理

Android事件处理通常和控件相结合,通常有以下几种事件处理模型: •(一)事件监听的处理模型 public voidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button b...

Android_JIE的博客 961

安卓事件处理2

除了基于监听的的事件处理模型外,安卓还提供了一种事件处理模型:基于回调的事件处理模型 为了使用回调机制类处理UI组件上发生的事件,我们需要为该组件提供对应的事件处理方法,但是Java又是静态语言,我们不能动态的为某一个对象添加方法,所以我们只能继承UI组件类,并重写该类的事件处理方法来实现,这就是基于回调的事件处理机制。 为了实现回调机制的事件处理,安卓为几乎所有的UI组件都提供了一些事件处理

lebronyouxiao 1393

   Android中的事件处理总结

Android中的事件处理总结 Android系统对动作做出的响应机制就是事件处理。Android提供了两种事件处理机制。 基于监听的事件处理机制 基于回调的事件处理机制 一、基于监听的事件处理机制 Android的事...

逝不等琴生的博客 2014
上一篇: Android中的权限问题
下一篇: Android TouchEvent事件传递机制
动脑学院[David]
博客等级 码龄8年 44粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值