android入门(五) 常见事件响应及实现方式

常见事件:
1.单击事件onClickListener
2.长按事件onLongClickListener
3.滑动事件onTouchListener
4.键盘事件onKeyListener
5.焦点事件setOnFocusChangeListener

我们先通过设置单击事件onClickListener来学习事件响应的实现方式。
实现方式:
一、动态设置(最常用方式)
在onCreate()中设置事件响应,由于onCreate()是应用启动时初始化执行的,所以称为动态设置方式

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button)findViewById(R.id.button1);

        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Toast.makeText(MainActivity.this, "通过动态设置", Toast.LENGTH_LONG).show();
            }
        });
    }

二、配置方式(仅限于onclick事件)
先在activity_main.xml里配置onClick事件

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="42dp"
        android:layout_marginTop="47dp"
        android:text="Button"
        android:onClick="click" />//最后这行配置onClick事件

再在MainActivity.java里写配置的click方法

    public void click(View v){//方法必须要接收参数View,也就是被点击的button对象
        Toast.makeText(MainActivity.this, "通过配置方式", Toast.LENGTH_LONG).show();
    }

三、可复用方式
当有多个组件要绑定事件时,为了减少代码量及提高程序可读性,可以使用可复用方式。
比如我们有3个button要绑定OnClickListener事件,我们可以先在MainActivity.java里创建一个OnClickListner对象

    private View.OnClickListener clickListner = new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            switch(arg0.getId()){
            case R.id.button1:
                Toast.makeText(MainActivity.this, "button1被点击,通过可复用方式", Toast.LENGTH_LONG).show();
                break;
            case R.id.button2:
                Toast.makeText(MainActivity.this, "button2被点击,通过可复用方式", Toast.LENGTH_LONG).show();
                break;
            case R.id.button3:
                Toast.makeText(MainActivity.this, "button3被点击,通过可复用方式", Toast.LENGTH_LONG).show();
                break;
            }
        }
    };

再在onCreate()里把3个button绑定这个OnClickListner事件

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

      Button button1 = (Button)findViewById(R.id.button1);
      Button button2 = (Button)findViewById(R.id.button2);
      Button button3 = (Button)findViewById(R.id.button3);

      button1.setOnClickListener(clickListner);
      button2.setOnClickListener(clickListner);
      button3.setOnClickListener(clickListner);
    }

其实这种方式与第一种动态设置是相同的,只不过把代码分开解耦了,从而方便复用。

其他常见事件:
长按事件onLongClickListener:
这里写图片描述
与单击事件不同的是,长按返回一个boolean的值,当为ture时,事件被消费,不再触发绑定的其他事件。举个例子,当一个按钮同时绑定了单击事件和长按事件,设置长按事件返回为false时,进行按钮长按操作,会先触发长按事件,再处罚单击事件;如果长按事件返回为ture,则不再会触发单击事件。

滑动事件onTouchListener:

        Button button = (Button) findViewById(R.id.button1);
        button.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                int actionType = event.getAction();
                if(actionType==MotionEvent.ACTION_DOWN){
                    System.out.println("按下");
                }else if(actionType==MotionEvent.ACTION_MOVE){
                    System.out.println("移动");
                }else if(actionType==MotionEvent.ACTION_UP){
                    System.out.println("松开");
                }
                return false;
            }
        });

滑动事件多了一个传入参数MotionEvent,它包含了android的元事件,比如ACTION_DOWN(按下),ACTION_MOVE(移动),ACTION_UP(松开)。我们可以针对每个元事件进行不同操作。

键盘事件onKeyListener:
这里写图片描述
keyCode传入为键盘按下的那个键对应的键值,我们可以通过判断键值来进行不同的操作。看到javadoc上说虚拟键盘通常不触发这个方法,但还有人用这个方法监听软键盘……好矛盾的感觉……先不管……

焦点事件setOnFocusChangeListener
与上述事件大同小异,同鞋自己研究咯~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值