Android 处理UI事件
Posted Naray
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
以上是关于Android 处理UI事件的主要内容,如果未能解决你的问题,请参考以下文章
Android YouTube Player API Fragment无法手动处理触摸事件
Android 事件分发事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup )(代码片段