smile908

导航

关于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 2022-11-01 15:14  smile908  阅读(97)  评论(0编辑  收藏  举报