android 事件机制与事件监听(一)

            在Android平台上,捕获用户在界面上的触发事件有很多种方法,View类就提供这些方法。

             你在使用各种View视图来布局界面时,会发现几个公用的回调方法来捕捉有用的UI触发事件,当事件在某个View对象上被触发时,这些方法会被系统框架通过这个对象所调用,例如:当一个View(如一个Button)被点击,onTouchEvent()方法会在该对象上被调用,所以,为了捕获和处理事件,必须去继承某个类,并重载这些方法,以便自己定义具体的处理逻辑,显然,你更容易明白,为什么在你使用View类时会嵌套带有这些回调方法的接口类,这些接口称为event listeners,它是你去获取UI交互事件的工具在你继承View类,以便建立一个自定义组,也许你想继承Button , 你会更普遍使用事件监听来捕捉用户的互动,在种情况下,你可以使用类的event handlers.来预定义事件的处理方法。

 

Event Listeners

View类里的event listener是一个带有回调方法的接口,当UI里的组建是被用户触发时,这些方法会被系统框架所调用


onClick()
来自View.OnClickListener 它会被调用当点击这个Item(在触摸模式),或者当光标聚集在这个Item上时按下“确认”键,导航键,或者轨迹球。


onLongClick()
来自View.OnLongClickListener. 它会被调用当长按这个Item(在触摸模式),或者当光标聚集在这个Item上时长按“确认”键,导航键,或者轨迹球。


onFocusChange()
来自View.OnFocusChangeListener 它会被调用当光标移到或离开这个Item,


onKey()
来自View.OnKeyListener..它会被调用,当光标移到这个Item,按下和释放一个按键的时候


onTouch()
来自View.OnTouchListener. 它会被调用,在这个Item的范围内点触的时候


onCreateContextMenu()
来自View.OnCreateContextMenuListener. 它会被调用, 当上下文菜单被建立时(由于持续的“长按”) 见讨论Creating Menus更多的信息。


这些方法和嵌套接口类都是一一对应的,如果确定其中一种方法处理你的互动事件,你需要在Activity中实
现这个带有这个方法的接口,并把它作为匿名类,然后,通过实例的View.set...Listener() 方法来设置监
听器(例如,调用setOnClickListener(),来设置OnClickListener做为监听器)

以下两个例子展示了如何为button设置监听:

一:实现监听事件的接口并复写回调事件。

      butt = (Button)findViewById(R.id.button1);
      butt.setOnClickListener(bListener);
    }    
    private OnClickListener bListener = new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub		
		}
	};

 

二:用Activity去实现OnClickListener接口,并作为它的一部分,会更方便,而不必去加载额外的类和对象:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
      butt = (Button)findViewById(R.id.button1);
      butt.setOnClickListener(this);
      butt.setId(1);
    }    

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		if(v.getId()==1)
		{
			Toast.makeText(StylePro.this, "butt", Toast.LENGTH_LONG).show();
		}
		
	}


 

这里注意一下,以上的例子可以看出onClick()是没有返回值的,但是有些事件处理方法是必须带返回值,它取决于的具体的事件,有些那么做的原因,看下面的例子:

onLongClick()
它返回的布尔值表明你已经完成了这个事件的处理,还是应该把它继续传下去。返回true表明已经处理完成并且停止了传递,如果返回为false表明事件还没有完成,或者它还需要继续被传递给其他的监听器


onKey()
它返回的布尔值表明你已经完成了这个事件的处理,还是应该把它继续传下去。返回true表明已经处理完成并且停止了传递,如果返回为false表明事件还没有完成,或者它还需要继续被传递给其他的监听器


onTouch()
它返回的布尔值表明你是否已经完成了这次事件的行动,重要的是后面可能还有很多后续的行动,这样,如果你返回false,表明在接到下一次的后续行动中,你还没有完成之前行为也没有意向去处理随后的行动,因此,在这个事件的后续行动中将不会再被调用。如fingure手势,或最终行动事件


记住:我们所关注的事件肯定是发生在高亮聚集的焦点,它从总视图(顶级的)被一级一级的向下传递,直到我们想要关注的组件,当焦点聚集在这个视图(或视图中的子视图)时,你能够使用dispatchKeyEvent() 作为一种代替方法,来捕获在视图上的按键事件,你还可以使用onKeyDown()和onKeyUp().来捕获所有事件内的交互活动


笔记:在Android 框架中会调用event handlers先处理事件,然后会适当的传递给二级默认的预定义handlers中;因此如果返回true,将会停止这个事件的传递,View中默认事件处理方法的回调也会被阻止。


因此,当你返回true肯定表明你是要终止这个事件的延续。


 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值