一、EditText调用软键盘搜索 setOnKeyListener 事件为什么执行了两次?
etProjectName.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
// 先隐藏键盘
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(PublishProjectActivity.this.getCurrentFocus()
.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
//进行搜索操作的方法,在该方法中可以加入mEditSearchUser的非空判断
**search(); //执行两次,想一想为什么?**
return true;
}
return false;
}
});
二、解决方案:
方案1
mBinding.etSearch.setOnKeyListener((v, keyCode, event) -> { // 开始搜索
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) { //避免setOnKeyListener 执行两次
// 先隐藏键盘
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(SearchActivity.this.getCurrentFocus()
.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
//搜索逻辑
search(mBinding.etSearch.getText().toString());
return true;
}
return false;
});
方案2
et.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
//判断是否是“放大镜”键【简称搜索键】
if(actionId == EditorInfo.IME_ACTION_SEARCH){
//隐藏软键盘
//对应逻辑操作
return true;
}
return false;
}
});
总结:setOnEditorActionListener这个方法,并不是在我们点击EditText的时候触发,也不是在我们对EditText进行编辑时触发,而是在我们编辑完之后点击软键盘上的各种键才会触发
三、知识拓展
1、修改Editview属性:Android:imeOptions=“actionSearch” 在该Editview获得焦点的时候将“回车”键改为“搜索”
android:singleLine="true" 不然回车【搜索】会换行
可以随自己的需求更改软键盘右下角的显示样式,例如:搜索,下一步,Q(搜索图标)
actionNone : 按下后光标到下一行(回车)
actionGo : 按下后搜索(Go)
actionSearch : 放大镜【搜索】
actionSend : Send 按下后发送
actionNext : Next 下一步
actionDone : Done,确定/完成,隐藏软键盘(包括不是最后一个文本输入框的情况也会隐藏)
使用方法:在xml里面写布局时直接加给EditTxt的imeOptions属性,例如:
项目开发中涉及到按键事件处理:
**“dispatchKeyEvent” “onKeyDown ”“onKeyLisenter” 简单理解**
接受按键优先级:
**dispatchKeyEvent > Activity的onKeyDown > view的onKeyLisenter**
其中按键处理事件return true ;表示已消耗此事件,不再继续传递;
2、Android MotionEvent的getX()和getRawX()方法的区别
3、Android中的View:getLeft()、getTop()、getRight()、getBottom()
此博文主要参阅:https://blog.csdn.net/m0_37700275/article/details/76944153,想了解更多类似的知识点,可以点击此链接!