smile908

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

关于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()方法。我们直接判断焦点是否失去,一旦焦点失去我们就执行我们自己的逻辑。

 

posted on   smile908  阅读(102)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示