Android的事件处理

Android的事件处理,第1张

概述一、Android事件处理的概述(一)、概念: 在Android中,我们可以通过事件处理使UI与用户互动(UI Events)。具体形式则是以事件监听器(event listener)的方式來“监听”用户的动作。 Android提供了非常良好的UI事件处理机制。View是绘制UI的类,每个View对象都可以向Android注册一个事件监听器。每个事件监听器都包含一 一、AndroID事件处理的概述

(一)、概念:
在AndroID中,我们可以通过事件处理使UI与用户互动(UI Events)。具体形式则是以事件监听器(event Listener)的方式來“监听”用户的动作。
AndroID提供了非常良好的UI事件处理机制。VIEw是绘制UI的类,每个VIEw对象都可以向AndroID注册一个事件监听器。每个事件监听器都包含一个回调方法(callback method),这个回调方法(callback method)主要的工作就是回应或处理用户的 *** 作。
(二)、AndroID UI事件处理的两套机制:
1、基于监听和回调的事件处理机制(event Listener):
就是为AndroID中的控件绑定特定的事件监听器。一旦该控件监听到有相应的动作发生,则该动作会触发事件监听器,而该监听器会调用内部的回调方法重点内容做出相应的响应。事件监听器的核心就是它内部包含的回调方法。

2、另外一种UI事件的机制为事件处理器(event handler):event handler与event Listener是不一样的处理机制。后续课程中会讲到多线程的Handler、Looper消息传递机制。

(三)、AndroID种常用的事件监听器及其回调方法(callback method):
1. VIEw.OnClickListener : onClick() 单击事件
2. VIEw.OnLongClickListener : onLongClick() 长按事件
3. VIEw.OnFocuschangelistener : onFocusChange() 焦点改变事件
4. VIEw.OnKeyListener : onKey() 按键事件
5. VIEw.OntouchListener : ontouch() 触摸屏事件
6. VIEw.OnCreateContextMenuListener : onCreateContextMenu() 创建上下文菜单事件

AndroID种常用的事件监听器及其回调方法(callback method):
VIEw.OnClickListener : onClick() 单击事件
VIEw.OnLongClickListener : onLongClick() 长按事件
VIEw.OnFocuschangelistener : onFocusChange() 焦点改变事件
VIEw.OnKeyListener : onKey() 按键事件
VIEw.OntouchListener : ontouch() 触摸屏事件
VIEw.OnCreateContextMenuListener : onCreateContextMenu() 创建上下文菜单事件

常用事件监听类:
1、RadioGroup.OnCheckedchangelistener 单选按钮组的勾选项改变监听器
2、Compoundbutton.OnCheckedchangelistener 多选框勾选项改变监听器
3、AdapterVIEw.OnItemSelectedListener 下拉列表框条目被选中监听器
4、AdapterVIEw.OnItemClickListener ListVIEw的条目单击监听器
5、AdapterVIEw.OnItemClickListener GrIDVIEw的条目单击监听器
6、DatePicker.OnDateChangedListener DatePicker的日期改变监听器
7、AbsListVIEw.OnScrollListener ListVIEw的滑动监听器
8.Seekbar.OnSeekbarchangelistener seekbar的滑动监听器
9.ratingbar.onratingbarchangelistener ratingbar的监听器。
10.DatePicker.onDateSetListener datepicker监听器
11.TimePicker.OnTimeSetListenner timepicker监听器
12.OnMultiChoiceClickListener() dialog监听器
13.OnChildClickListener ExpanableListVIEw

其实事件监听器,就是实现了一个特定接口的java类的实例。
实现事件监听器有几种形式:
1、内部类形式;
2、外部类形式;
3、Activity实现监听器接口,自身作为事件监听器类;
4**、匿名内部类**的形式创建事件监听器,并实现监听器内的方法。(AndroID开发中常用匿名内部类作为监听器)

扩展:

setonItemSelectedListener setonItemClickListener 区别

OnItemSelectedListener.setonItemSelectedListener()
指的是鼠标获得一个条目的焦点,字面上理解是选择一个条目

OnItemClickListener.setonItemClickListener()
指的是你单击一个条目。
如果你从鼠标滚动(或者说选择一个条目)过渡到单击一个条目,都会在调用OnItemClickListener.setonItemClickListener()之前调用一次OnItemSelectedListener.onnothingSelected()。貌似是因为你单击了一个条目之前就默认你没有选择任何条目,所以会触发一个OnItemSelectedListener.onnothingSelected()



有关ListVIEw中数据改变时,怎么办。
在你改变数据的后面加上一句adapter.notifyDataSetChanged(),adapter是Adapter的实例化对象,androID自带的可以,你自己写的Adapter也可以



onKeyDown
标准来一个:
@OverrIDe
public boolean onKeyDown(int keyCode,KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_BACK)) {
//执行 *** 作
return true;
}
return super.onKeyDown(keyCode,event);
}

@OverrIDe
public boolean onKeyDown(int keyCode,KeyEvent event) {
if (webVIEw.canGoBack()) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
webVIEw.goBack(); // goBack()表示返回WebVIEw的上一页面
return true;
}
}
return super.onKeyDown(keyCode,event);
}

API



点击home键后台运行
我们理所当然的想到,监听Home键的方法是:if(keyCode == KeyEvent.KEYCODE_HOME)。但实际上,这样是行不通的,因为此时home键的消息在framework层就已经被拦截,所以,我们在应用中通过此方法是无法监听到Home键的消息的。

使用观察者模式实现来监听实现
HomeWatcher.java

package com.example.homekey;import androID.content.broadcastReceiver;import androID.content.Context;import androID.content.Intent;import androID.content.IntentFilter;//androID 4.0以后home按键监听方法(观察者模式实现);/** * Home键监听封装 * @author zlw*/   public class HomeWatcher {       static final String TAG = "HomeWatcher";       private Context mContext;       private IntentFilter mFilter;       private OnHomepressedListener mListener;       private InnerRecevIEr mRecevIEr;       // 回调接口       public interface OnHomepressedListener {           public voID onHomepressed();           public voID onHomeLongpressed();       }       public HomeWatcher(Context context) {           mContext = context;           mRecevIEr = new InnerRecevIEr();           mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYstem_DIALOGS);       }       /**      * 设置监听      *       * @param Listener      */       public voID setonHomepressedListener(OnHomepressedListener Listener) {           mListener = Listener;       }       /**      * 开始监听,注册广播      */       public voID startWatch() {           if (mRecevIEr != null) {               mContext.registerReceiver(mRecevIEr,mFilter);           }       }       /**      * 停止监听,注销广播      */       public voID stopWatch() {           if (mRecevIEr != null) {               mContext.unregisterReceiver(mRecevIEr);           }       }

广播接收者

class InnerRecevIEr extends broadcastReceiver {           final String SYstem_DIALOG_REASON_KEY = "reason";           final String SYstem_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";           final String SYstem_DIALOG_REASON_RECENT_APPS = "recentapps";           final String SYstem_DIALOG_REASON_HOME_KEY = "homekey";           @OverrIDe           public voID onReceive(Context context,Intent intent) {               String action = intent.getAction();               if (action.equals(Intent.ACTION_CLOSE_SYstem_DIALOGS)) {                   String reason = intent.getStringExtra(SYstem_DIALOG_REASON_KEY);                   if (reason != null) {   //                    L.i(TAG,"action:" + action + ",reason:" + reason);                       if (mListener != null) {                           if (reason.equals(SYstem_DIALOG_REASON_HOME_KEY)) {                               // 短按home键                               mListener.onHomepressed();                           } else if (reason                                   .equals(SYstem_DIALOG_REASON_RECENT_APPS)) {                               // 长按home键                               mListener.onHomeLongpressed();                           }                       }                   }               }           }       }   }

MainActivity.java

package com.example.homekey;import com.example.homekey.HomeWatcher.OnHomepressedListener;import androID.support.v7.app.ActionBaractivity;import androID.os.Bundle;import androID.vIEw.Menu;import androID.vIEw.MenuItem;import androID.Widget.Toast;public class MainActivity extends ActionBaractivity implements OnHomepressedListener{    private HomeWatcher mHomeWatcher;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);    }    @OverrIDe    protected voID onResume() {        mHomeWatcher = new HomeWatcher(this);            mHomeWatcher.setonHomepressedListener(this);            mHomeWatcher.startWatch();        super.onResume();    }    @OverrIDe    protected voID onPause() {        super.onPause();        mHomeWatcher.setonHomepressedListener(null);            mHomeWatcher.stopWatch();      }    @OverrIDe    public voID onHomepressed() {        Toast.makeText(MainActivity.this,"onHomepressed",Toast.LENGTH_SHORT).show();    }    @OverrIDe    public voID onHomeLongpressed() {        Toast.makeText(MainActivity.this,"onHomeLongpressed",Toast.LENGTH_SHORT).show();    }}

源码下载



推荐阅读
利用onUserLeaveHint发送后台运行通知
Android Back Home键监听
Android之Home键监听封装

总结

以上是内存溢出为你收集整理的Android的事件处理全部内容,希望文章能够帮你解决Android的事件处理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1089372.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存