如何在离开编辑框时隐藏软键盘?

4

当用户使用键盘输入后,我希望键盘能够隐藏,这样我就可以看到屏幕底部的结果。我已经在我的onCreate方法中尝试过了,但是它并没有起作用。我缺少了什么?

InputMethodManager imm =                                  
      (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditTextbox.getWindowToken(), 0); 
5个回答

3
您可以这样强制隐藏键盘:
Window window = getWindow();
                window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

我会在 onCreate 方法中获取窗口,在 onFocusChanged() 方法或者 OnKeyListener() 方法中隐藏键盘。

2

您是否设置了按键监听器?

您并没有明确说明如何知道用户何时完成输入文本,因此我将假设他们正在按软键盘上的“回车”按钮。以下是我处理这种情况的方法。我在对话框和活动中都使用过,并获得了成功。希望它有所帮助。

this.setOnKeyListener(new OnKeyListener()
{
     /**
      * This listens for the user to press the enter button on 
      * the keyboard and then hides the virtual keyboard
      */
     @Override
     public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event)
     {
        // If the event is a key-down event on the "enter" button
        if ( (event.getAction() == KeyEvent.ACTION_DOWN  ) &&
             (keyCode           == KeyEvent.KEYCODE_ENTER)   )
        {               
           // hide virtual keyboard
           InputMethodManager imm = 
              (InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
           imm.hideSoftInputFromWindow(sessionTag.getWindowToken(), 0);
           return true;
        }
        return false;
     }
  }); 

1
您可以扩展 EditText 类并在 onFocusChanged() 方法中使用您的代码,当 focused 参数为 false 时。

1

这取决于当前焦点所在的位置……如果是另一个获取焦点的editText,则可能会弹出键盘……尝试显式地将焦点给予不同的元素...


那就是了,当我失去对EditText框的焦点时,我的上面显示的代码会隐藏键盘,但焦点被指向下一个EditText框,这违背了我的意愿。为了解决这个问题,我加入了两个命令来隐藏键盘,一个是我离开的EditText框,另一个是我刚刚聚焦的EditText框: InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(myEditText1.getWindowToken(), 0); imm.hideSoftInputFromWindow(myEditText2.getWindowToken(), 0); - Ted Betz

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接