关于Editview失去焦点问题
项目背景:在一次项目中,需要输入框输入结束后就立即发送注册包给平台以获取网关列表,开始的想法是,监听收起键盘就执行,但是最后
没有实现,最后想到了editview失去焦点的事件,一旦editview失去焦点,说明用户输入结束,即可以发送注册包获取网关列表。
判断editview失去焦点的源码如下:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()){
//点击屏幕时消除输入框的焦点
case MotionEvent.ACTION_DOWN:
View view = getCurrentFocus(); //获得当前聚焦控件
if(view instanceof EditText){
Rect rect = new Rect();
view.getGlobalVisibleRect(rect); //获得控件在屏幕上的显示区域
//判断:如果点击区域不在控件中
if(!rect.contains((int)ev.getRawX(),(int)ev.getRawY())){
view.clearFocus(); //清除焦点
}
}
break;
}
return super.dispatchTouchEvent(ev);
}
这个方法用于判断editview是否失去的焦点,系统会将他记录下来。我们使用的时候直接进行判断就可以了。我们来看一下判断的代码部分。
viewBinding.server.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus){
firstRegister();
}
}
});
这个server就是editview控件的id,我们调用editview的焦点改变的方法(setOnFocusChangeListener)并实现
接口的onFocusChange()方法。我们直接判断焦点是否失去,一旦焦点失去我们就执行我们自己的逻辑。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具