Android 处理UI事件

一、概述

  在Java和android中,通过事件来与各种输入设备进行沟通。

  事件是由OS产生的消息,当某个UI元素被用户以特定方式进行操作时,OS就会将事件消息发送给相应的View对象。

二、监听及事件处理

  “处理”(Handle)与“处理程序”(Handler)

三、View类处理UI事件

  在应用程序中,每一个UI元素都是彼此不同的实例化View对象,每一个对象都包含专属于该View对象的事件。

  在布局中,一个View对象是通过公共的回调(Callback)方法来与应用程序的其它部分进行沟通的,当某一个特定动作发生在该UI的View对象中时,Android就会调用指定的回调方法。

  在Android中提供了一套事件处理接口。在View类中嵌套了这些事件接口,通过它们可以定义回调方法。因为,它们是OS的一部分,组成了View类及其所有的方法。在View类中嵌套的接口就是事件监听器。

  1. 事件回调方法:

  事件监听器就是View类中的一个Java接口,里面包含了一个单独的回调方法。以下就是在Android中常用的回调方法:

  • onClick():来自View.OnClickListener类,在触摸屏幕或者点击UI元素时触发。
  • onLongClick():来自View.OnLongCliclListener类,触摸或按钮某个UI元素超过1秒触发。
  • onKey():来自View.OnKeyListener类,按下或释放键盘时触发。
  • onTouch():来自View.OnTouchListener类,在触摸、释放、手势事件时触发。
  • onFocusChange():来自View.OnFocusChange类,在焦点改变时触发。
  • onContextMenu():来自View.OnTouchListener类,上下文菜单。

四、事件绑定

1. 为指定的UI元素添加onClick(...)事件监听器

 1 public class MainActivity extends Activity
 2 {
 3     private Context mContext;
 4
 5     @Override
 6     public void onCreate(Bundle savedInstanceState)
 7     {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10
11         mContext = getApplicationContext();
12
13         // 获取Button对象,绑定事件监听器
14         Button syncBtn = (Button)findViewById(R.id.main_sync_btn1);
15         // 将Button控件与事件监听器进行绑定
16         syncBtn.setOnClickListener(new View.OnClickListener()
17         {
18             @Override
19             public void onClick(View v)
20             {
21                 // 选择触发监听器事件的UI元素View
22                 switch (v.getId())
23                 {
24                     case R.id.main_sync_btn1:
25                     {
26                         EditText editText = (EditText)findViewById(R.id.main_input_text1);
27                         TextView showText = (TextView)findViewById(R.id.main_input_text2);
28                         showText.setText(editText.getText());
29                         break;
30                     }
31                     default:
32                         Toast.makeText(mContext, mContext.getResources().getString(R.string.disable_event), Toast.LENGTH_SHORT).show();
33                         break;
34                 }
35             }
36         });
37     }
38
39 }

2. 向活动添加onClick(...)监听器

 1 /**
 2  * @Classname MainActivity
 3  * @abstract 继承Activity类
 4  * @description 此类用于测试向活动添加onClick监听器,继承接口View.OnClickListener类
 5  * @throws
 6  */
 7 public class MainActivity extends Activity implements View.OnClickListener
 8 {
 9     private Context mContext;
10
11     @Override
12     public void onCreate(Bundle savedInstanceState)
13     {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_main);
16
17         mContext = getApplicationContext();
18
19         // 获取Button对象,绑定事件监听器
20         Button syncBtn = (Button)findViewById(R.id.main_sync_btn1);
21         // 将Button控件与事件监听器进行绑定
22         syncBtn.setOnClickListener(this);
23     }
24
25     // 覆盖View.OnClickListener接口类的onClick(...)方法
26     @Override
27     public void onClick(View view)
28     {
29         // 选择触发监听器事件的UI元素View
30         switch (view.getId())
31         {
32             case R.id.main_sync_btn1:
33             {
34                 EditText editText = (EditText)findViewById(R.id.main_input_text1);
35                 TextView showText = (TextView)findViewById(R.id.main_input_text2);
36                 showText.setText(editText.getText());
37                 break;
38             }
39             default:
40                 Toast.makeText(mContext, mContext.getResources().getString(R.string.disable_event), Toast.LENGTH_SHORT).show();
41                 break;
42         }
43     }
44
45 }

  PS:注意,在继承View.OnClickListener接口类,要覆盖onClick(...)方法。同时,还要对触发事件的控件(Button)进行事件监听器绑定。

1 // 获取Button对象,绑定事件监听器
2 Button syncBtn = (Button)findViewById(R.id.main_sync_btn1);
3 // 将Button控件与事件监听器进行绑定
4 syncBtn.setOnClickListener(this);
时间: 2024-10-09 12:05:53

Android 处理UI事件的相关文章

Android点击事件的四种写法

Android点击事件的四种写法 一.Android点击事件的四种写法 1.点击事件的第一种写法 .  写一个内部类.实现点击事件的接口 bt.setOnClickListener(new MyButtonListener()); 2.点击事件的第二种写法,匿名内部类 bt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { callPhone(); } }); 3.点击事件的第三种

android自定义UI模板图文详解

不知道大家在实际开发中有没有自定义过UI模板?今天花时间研究了一下android中自定义UI模板,与大家分享一下. 每个设计良好的App都是自定义标题栏,在自定义标题栏的过程中大部分人可能都是自定义一个标题的xml文件,然后在需要的地方直接通过include来引用,这比起在每个布局文件中写标题栏已经进化很多了,但仍然不是最简单有效的方法,我们为什么不能自定义一个标题控件呢?今天就带大家自己做一个标题栏控件.效果图如下: 开始啦: 第一步:自定义xml属性 新建一个android项目,在value

Android中的事件传递机制

Android源码版本:API Level 19(Android 4.4) Android事件构成 在Android中,事件主要包括点按.长按.拖拽.滑动等,点按又包括单击和双击,另外还包括单指操作和多指操作.所有这些都构成了Android中的事件响应.总的来说,所有的事件都由如下三个部分作为基础: 按下(ACTION_DOWN) 移动(ACTION_MOVE) 抬起(ACTION_UP) 所有的操作事件首先必须执行的是按下操作(ACTIONDOWN),之后所有的操作都是以按下操作作为前提,当按

Android ViewGroup触摸屏事件派发机制详解与源码分析

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 该篇承接上一篇<Android View触摸屏事件派发机制详解与源码分析>,阅读本篇之前建议先阅读. 1 背景 还记得前一篇<Android View触摸屏事件派发机制详解与源码分析>中关于透过源码继续进阶实例验证模块中存在的点击Button却触发了LinearLayout的事

Android更新Ui的几种方法和见解

<代码里的世界> 用文字札记描绘自己 android学习之路 转载请保留出处 by Qiao http://blog.csdn.net/qiaoidea/article/details/45115047 1. 简述 先贴一个我们刚做Android开发时候最容易遇到的一个错误异常 AndroidRuntimeException :"Only the original thread that created a view hierarchy can touch its views&quo

屏蔽UI事件

UGUI 提供了一个检测是否点击在UI上的方法 EventSystem.current.IsPointerOverGameObject(); 但是该方法在PC上检测正常,结果拿到Android真机测试上,永远检测不到. 在网上找了一些大神的解决方案 using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; using UnityEngine.EventS

Android笔记:触摸事件的分析与总结----TouchEvent处理机制

   其他相关博文:    Android笔记:触摸事件的分析与总结----MotionEvent对象    Android笔记:触摸事件的分析与总结----TouchEvent处理机制 Android中的事件类型分为按键事件和屏幕触摸事件.TouchEvent是屏幕触摸事件的基础事件,要深入了解屏幕触摸事件的处理机制,就必须掌握TouchEvent在整个触摸事件中的转移和处理过程.此处将对TouchEvent处理机制的学习做个小小的总结和备记. 当屏幕中包含一个ViewGroup,而这个Vie

Android自定义UI陷阱:LayoutInflater.from().inflate()一定不能工作在父类或虚类里

问题背景:有一些UI具有共性,比如常见的app第一次运行时出现的各种指示框,告诉你往哪搓是调音量的,往哪点是调屏幕亮度的,当点击这些VIew,则其自动消失.或者一动时间后,自动消失.另外一个问题是,不同的方向下加载出来的指示View内容是不一样的. 为此需要将这些特点的View抽象出来,写个父类或者说是基类,为啥一定要这样搞,这样写好处很多.优点如下: 1.可以让代码变得更简洁.每个子View里的共同的方法都由父类来做,每个子View实现自己的逻辑就ok了. 2.因为这些View只工作一次,所以

Android笔记:触摸事件的分析与总结----MotionEvent对象

一.MotionEvent对象 当用户触摸屏幕时,将创建一个MontionEvent对象.MotionEvent包含了关于发生触摸的位置和时间的信息,以及触摸事件的其他细节. 获取MontionEvent对象的方法有: 1.重载Activity中的onTouchEvent(MotionEvent event)方法; 2.View对象调用View.setOnTouchListener接口实现onTouch(View v, MotionEvent event)方法; 获得MontionEvent对象