4. Android 事件

一、OnLongClickListener长按事件

1. 参考

Android App应用中,OnLongClick事件表示长按2秒以上触发的事件。

OnLongClickListener接口与OnClickListener接口原理基本相同,只是该接口为View长按事件的捕捉接口,即当长时间按下某个View时触发的事件,该接口对应的回调方法签名如下。

public boolean onLongClick(View v)

参数v:参数v为事件源控件,当长时间按下此控件时才会触发该方法。
返回值:该方法的返回值为一个boolean类型的变量,当返回true时,表示已经完整地处理了这个事件,并不希望其他的回调方法再次进行处理;当返回false时,表示并没有完全处理完该事件,更希望其他方法继续对其进行处理。这个返回值的意义在于,如果同时设置了onClickListeneronLongClickListener,返回true的时候,长按不会触发onClickListener的回调,返回false的时候两个回调都会触发

2. 场景

一般使用手机时删除文件、复制文本时可能会用到吧。

👉更详细的信息:参考

二、OnFocusChangeListener焦点事件

1. 参考

焦点事件其实就是当我们操作那个组件时获取焦点的事件

public void onFocusChange(View v, boolean hasFocus) 

参数:参数v为事件源控件,boolean类型的hasFocus是控件是否获得焦点。true获取焦点,false失去焦点。

contentEdit.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            //获取焦点
        }else{
            //失去焦点
        }
    }
});

通过代码使控件失去焦点:

contentEdit.cleanFocus();
2. 场景

焦点事件在很多情况下可以帮助组件进行一些初始化的配置操作,或者对输入的内容进行验证,比如不能输入中文啊之类的。

三、OnKeyListener键盘事件

1. 参考

OnKeyListener是对手机键盘进行监听的接口,通过对某个View注册该监听,当View获得焦点并有键盘事件时,便会触发该接口中的回调方法。该接口中的抽象方法签名如下:

public boolean onKey(View V, int keyCode, KeyEvent event);

参数v:参数v为事件的事件源控件。
参数keyCode:参数keyCode为手机键盘的键盘码。
参数event:参数event便为键盘事件封装类的对象,其中包含了事件的详细信息,例如发生的事件、事件的类型等。event中包含的参数详解:

editText.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int i, KeyEvent keyEvent) {
                Log.d(TAG, "onKey: "+num);
                num++;
                int metaState = keyEvent.getMetaState();
                int unicodeChar = keyEvent.getUnicodeChar();
                String msg = "";
                msg +="按键动作:" + String.valueOf(keyEvent.getAction())+"\n";
                msg +="按键代码:" + String.valueOf(i)+"\n";
                msg +="按键字符:" + (char)unicodeChar+"\n";
                msg +="UNICODE:" + String.valueOf(unicodeChar)+"\n";
                msg +="重复次数:"+ String.valueOf(keyEvent.getRepeatCount())+"\n";
                msg +="功能键状态:" + String.valueOf(metaState)+"\n";
                msg +="硬件编码:" + String.valueOf(keyEvent.getScanCode())+"\n";
                msg +="按键标志:" + String.valueOf(keyEvent.getFlags())+"\n";
                textView.setText(msg);
                return false;
            }
        });

在这里插入图片描述

四、OnTouchListener触摸事件

1. 参考

监听屏幕触摸事件,接口函数如下:

public boolean onTouch(View v, MotionEvent event)

参数v:参数v表示触发事件的控件

参数event:封装的触摸事件对象,包含了一些触摸屏幕的信息。

返回值:返回值为true时,就认为这个事件被onTouch消费掉了,不会再继续向下传递。默认返回值是false

其中通过event.getAction()可以获取用户动作。

Android通过各种ACTION(动作)来区分用户行为,然后现在需要通过系统提供的这些ACTION来判断是点击还是长按,根据之前的经验ACTION的执行是有先后顺序的依次是:ACTION_DOWN, ACTION_MOVE, ACTION_UP, ACTION_CANCEL,且当用户手指按下时触发ACTION_DOWN,手指抬起时触发ACTION_UP,移动时被拦截触发ACTION_CANCEL,这三个都是仅会触发依次,手指移动是触发ACTION_MOVE会根据手指移动事件执行0到多次。

ACTION_DOWN:当前是否为滚动视图,如果不是,当前视图先显示为按下状态,且在500毫秒后执行长按操作。

ACTION_MOVE:如果手指移动出当前视图范围内,清理以上设置的所有状态,并且如果长按还没有执行不会触发。

ACTION_UP:如果MOVE时没有进行清理,且还没有执行长按操作,执行点击操作

ACTION_CANCEL:清理所有状态

用过event.getRawX()/ event.getRawY()获取触摸位置的横 / 纵坐标。还有一个event.getX()函数,也是用于获取坐标,他们的区别在于:

getX是获取以控件左上角为坐标原点计算的轴坐标值。
getRawX 获取的是以屏幕左上角为坐标原点计算的轴坐标值。

2. 场景

用户触摸屏幕操作。

五、OnMenuItemClickListener菜单项点击

1. 参考

如果项本身没有单独的点击侦听器,则负责接收菜单项目点击事件的接口。接口函数:

boolean onMenuItemClick(MenuItem item)

参数item:被点击的MenuItem

返回值:如果已处理事件,则为true,否则为false。

2. 场景

当菜单项未设置点击事件时,可以通过这个函数设置。

六、OnCreateContextMenuListener上下文菜单

OnCreateContextMenuListener接口是用来处理上下文菜单显示事件的监听接口。该方法是定义和注册上下文菜单的另一种方式。该接口中事件处理的回调方法签名如下所示。

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo info) 

参数menu:参数menu为事件的上下文菜单。

参数v:参数v为事件源View,当该View获得焦点时才可能接收该方法的事件响应。

参数infoinfo对象中封装了有关上下文菜单额外的信息,这些信息取决于事件源View。

该方法会在某个View中显示上下文菜单时被调用,开发人员可以通过实现该方法来处理上下文菜单显示时的一些操作。

七、其他事件监听

SeekBar(进度条)的监听事件:OnSeekBarChangedListener接口

RadioGroup(单选按钮)的监听事件:OnCheckedChangeListener接口

Spinner(下拉列表)的监听事件:OnItemSelectedListener接口

。。。其实还蛮多的😵,不一一列举了。

参考:❗️Android中的监听事件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值