输入框收回bug

一、bug问题描述

界面上只有两个框,用户名和密码,用户名框输入之后可点击done按钮收回,密码框输入后点击done按钮无效

二、已有代码

  • 在点击不同的editText时会切换焦点事件
  • 重写了onFocusChange方法对editText事件做出setActivated处理
  • 用户名的xml中设置了actiondone,密码的xml未设置actiondone

三、问题所在

  • 通过切换焦点完成键盘的自动弹出
  • 没有做键盘收回的逻辑
  • 密码的xml设置actiondone无效

四、解决方案

  1. 通过为每个EditText设置android:singleLine=”true”,直到最后一个获取焦点后显示为done,点击done实现隐藏
  2. 设置控件的android:imeOptions=”actionDone”属性,按理说点击done即可收回键盘
  3. 监听Enter事件,设置控件的OnKeyListener

五、最终解决

  • 由于在测试手表上通过修改imeOptions的不同属性在实际的运行UI中并没有显示对应的改变,合理怀疑可能是由于键盘设置的输入不同。
  • 采用第三种方式解决
OnKeyListener onkey = new OnKeyListener() {
            @Override
            public boolean onKey(View view, int i, KeyEvent keyEvent) {
                if (i == KeyEvent.KEYCODE_ENTER) {
                    InputMethodManager imm = (InputMethodManager) view.getContext()
                        .getSystemService(Context.INPUT_METHOD_SERVICE);
                    if (imm.isActive()) {
                        imm.hideSoftInputFromWindow(view.getApplicationWindowToken(), 0);
                    }
                    return true;
                }
                return false;
            }
        };
        loginPwdEt.setOnKeyListener(onkey);

 

posted on 2022-06-08 16:42  suanningmeng98  阅读(32)  评论(0编辑  收藏  举报