当前位置:   article > 正文

探究 Android 调用软键盘搜索,setOnKeyListener 事件执行两次_editview.setonkeylistener(new onkeylistener() {}

editview.setonkeylistener(new onkeylistener() {}

一、EditText调用软键盘搜索 setOnKeyListener 事件为什么执行了两次?

  1. etProjectName.setOnKeyListener(new View.OnKeyListener() {
  2. @Override
  3. public boolean onKey(View v, int keyCode, KeyEvent event) {
  4. if (keyCode == KeyEvent.KEYCODE_ENTER) {
  5. // 先隐藏键盘
  6. ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
  7. .hideSoftInputFromWindow(PublishProjectActivity.this.getCurrentFocus()
  8. .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
  9. //进行搜索操作的方法,在该方法中可以加入mEditSearchUser的非空判断
  10. **search(); //执行两次,想一想为什么?**
  11. return true;
  12. }
  13. return false;
  14. }
  15. });

二、解决方案:

方案1

  1. mBinding.etSearch.setOnKeyListener((v, keyCode, event) -> { // 开始搜索
  2. if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) { //避免setOnKeyListener 执行两次
  3. // 先隐藏键盘
  4. ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
  5. .hideSoftInputFromWindow(SearchActivity.this.getCurrentFocus()
  6. .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
  7. //搜索逻辑
  8. search(mBinding.etSearch.getText().toString());
  9. return true;
  10. }
  11. return false;
  12. });

方案2

  1. et.setOnEditorActionListener(new TextView.OnEditorActionListener() {
  2. @Override
  3. public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
  4. //判断是否是“放大镜”键【简称搜索键】
  5. if(actionId == EditorInfo.IME_ACTION_SEARCH){
  6. //隐藏软键盘
  7. //对应逻辑操作
  8. return true;
  9. }
  10. return false;
  11. }
  12. });

总结:setOnEditorActionListener这个方法,并不是在我们点击EditText的时候触发,也不是在我们对EditText进行编辑时触发,而是在我们编辑完之后点击软键盘上的各种键才会触发

三、知识拓展

1、修改Editview属性:Android:imeOptions=“actionSearch” 在该Editview获得焦点的时候将“回车”键改为“搜索”

  1. android:singleLine="true" 不然回车【搜索】会换行
  2. 可以随自己的需求更改软键盘右下角的显示样式,例如:搜索,下一步,Q(搜索图标)
  3. actionNone : 按下后光标到下一行(回车)
  4. actionGo : 按下后搜索(Go)
  5. actionSearch : 放大镜【搜索】
  6. actionSend : Send 按下后发送
  7. actionNext : Next 下一步
  8. actionDone : Done,确定/完成,隐藏软键盘(包括不是最后一个文本输入框的情况也会隐藏)
  9. 使用方法:在xml里面写布局时直接加给EditTxt的imeOptions属性,例如:
  10. 项目开发中涉及到按键事件处理:
  11. **“dispatchKeyEvent” “onKeyDown ”“onKeyLisenter” 简单理解**
  12. 接受按键优先级:
  13. **dispatchKeyEvent > Activity的onKeyDown > view的onKeyLisenter**
  14. 其中按键处理事件return true ;表示已消耗此事件,不再继续传递;

2、Android MotionEvent的getX()和getRawX()方法的区别

3、Android中的View:getLeft()、getTop()、getRight()、getBottom()​​​​​​​

此博文主要参阅:https://blog.csdn.net/m0_37700275/article/details/76944153,想了解更多类似的知识点,可以点击此链接!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/391068
推荐阅读
相关标签
  

闽ICP备14008679号