【问题标题】:Android: Hiding the keyboard in an overridden "Done" keypress of EditTextAndroid:将键盘隐藏在 EditText 的覆盖“完成”按键中
【发布时间】:2017-08-12 13:46:04
【问题描述】:

我使用了一些 Android 代码来覆盖 EditText 字段中的“完成”按钮:

   myEditField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_DONE) {

                mySubroutine();

                return true;
            }
            return false;
        }
    });

激活该字段会调用键盘,然后按“完成”会成功评估 mySubroutine()。但是,当我按下“完成”时,键盘不再消失。如何将此默认行为恢复为例程?

【问题讨论】:

    标签: android overriding android-edittext


    【解决方案1】:

    为什么不:

    myEditField.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
        @Override 
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
            if (actionId == EditorInfo.IME_ACTION_DONE) { 
    
                mySubroutine(); 
            } 
            return false; 
        } 
    }); 
    

    在处理完代码后返回 false。这可以解释为无论您的代码 (mySubroutine()) 做什么,之后它仍将使用默认操作。如果您返回“true”,则说明您是一个快乐的编码员,需要完成的所有事情都在您的 mySubroutine() 中发生,并且默认操作不需要执行。

    【讨论】:

    • 这是正确的方法,否则您将违背框架的设计方式。我已在相关问题hereway-over-the-top 答案中对此进行了详细说明
    • 我已经四年没有接触过 Android 代码了,所以我相信你的话。
    【解决方案2】:

    您可以通过以下方式关闭键盘:

    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(getWindowToken(), 0);
    

    【讨论】:

    • 我正在使用 Eclipse,我收到以下两个错误:“InputMethodManager 无法解析为类型”和“方法 getWindowToken() 未定义新 TextView.onEditorActionListener() 类型{}" 我不是一个 Java 程序员,所以我不知道如何解释这些。我需要早点加入一些东西吗?
    • 尝试按 Control+Shift+o 进行相应的导入。
    • 谢谢,我需要一个依赖项。我还必须用 v.getWindowToken() 替换 getWindowToken() ,否则效果很好,谢谢!现在我只需要了解它做了什么
    【解决方案3】:

    您必须将 onClickListener 附加到执行以下代码的按钮:

    InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editview.getWindowToken(), 0);
    

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题。在 editText VISIBILITY 从 GONE 更改为 VISIBLE 之后,我必须立即设置焦点并显示软键盘。我使用以下代码实现了这一点:

              (new Handler()).postDelayed(new Runnable() {
      
              public void run() {              yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
                  yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));                       
      
              }
          }, 200);
      

      【讨论】:

        猜你喜欢
        • 2014-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多