基于回调的事件模型:事件源与事件监听是统一的,事件由事件源本身处理。
创新互联10多年成都企业网站定制服务;为您提供网站建设,网站制作,网页设计及高端网站定制服务,成都企业网站定制及推广,对成都水电改造等多个方面拥有丰富的网站推广经验的网站建设公司。基于回调的事件处理适合于应付那种事件处理逻辑比较固定的VIew。
Android最先触发控件上绑定的事件监听器。
使用回调机制处理GUI组件上所发生的事件,需要自定义组件类继承GUI组件类,并重写该类的事件处理方法来实现。并且在XML文件中使用自定义组件类。
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):当用户在该组件上触发轨迹球屏事件时触发该方法。
当回调方法返回true时,表明该处理方法已经完全处理该事件,该事件不会传播出去。
当回调方法返回false时,表明该处理方法并未完全处理该事件,该事件会传播出去。
对于基于回调的事件传播而言,某组件上所发生的事情不仅会激发该组件上的回调方法,也会触发该组件所在Activity的回调方法——只要时间能传播到该Activity。
示例:
activity_main
MyButton.java
package com.example.huidiao; public class MyButton extends Button { // AttributeSet是接收xml中定义的属性信息,这不一定是自定义布局,不是自定义布局也有该属性,要不xml中定义的属性信息就无法接收了。 public MyButton(Context context, AttributeSet set) { super(context, set); } // 重写触屏事件的回调方法 public boolean onTouchEvent(MotionEvent event) { // 事件 super.onTouchEvent(event); Log.v("按钮上触屏事件", "在按钮上的触屏,事件源自己处理"); return false; // ② } }
MainActivity.java
package com.example.huidiao; public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // 重写onTouchEvent方法,该方法可监听它所包含的所有控件被触屏事件 public boolean onTouchEvent(MotionEvent event) { // 事件 super.onTouchEvent(event); Log.v("触屏事件传递到Activity", "在自定义按钮上触屏,事件在按钮所在Activity处理"); return true; // ③ } }
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。