一、OnLongClickListener
长按事件
1. 参考
在Android App
应用中,OnLongClick
事件表示长按2秒以上触发的事件。
OnLongClickListener
接口与OnClickListener
接口原理基本相同,只是该接口为View
长按事件的捕捉接口,即当长时间按下某个View
时触发的事件,该接口对应的回调方法签名如下。
public boolean onLongClick(View v)
参数v:参数v为事件源控件,当长时间按下此控件时才会触发该方法。
返回值:该方法的返回值为一个boolean
类型的变量,当返回true
时,表示已经完整地处理了这个事件,并不希望其他的回调方法再次进行处理;当返回false
时,表示并没有完全处理完该事件,更希望其他方法继续对其进行处理。这个返回值的意义在于,如果同时设置了onClickListener
和onLongClickListener
,返回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
是获取以控件左上角为坐标原点计算的X
轴坐标值。
getRawX
获取的是以屏幕左上角为坐标原点计算的X
轴坐标值。
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
获得焦点时才可能接收该方法的事件响应。
参数info
:info
对象中封装了有关上下文菜单额外的信息,这些信息取决于事件源View。
该方法会在某个View中显示上下文菜单时被调用,开发人员可以通过实现该方法来处理上下文菜单显示时的一些操作。
七、其他事件监听
SeekBar
(进度条)的监听事件:OnSeekBarChangedListener
接口
RadioGroup
(单选按钮)的监听事件:OnCheckedChangeListener
接口
Spinner
(下拉列表)的监听事件:OnItemSelectedListener
接口
。。。其实还蛮多的😵,不一一列举了。
参考:❗️Android中的监听事件