如何关闭片段中的软键盘

我在一个片段内部有一个EditText,它本身在一个actionbarsherlock选项卡中。 当我触摸EditText框内时,出现一个软键盘,其中一个键带有放大镜(搜索)图标。 当我键入一些文本,然后单击搜索键,我可以在我的onEditorAction中处理键入的字符串,但软键盘仍然显示。 我怎样才能以编程方式关闭它?

顺便说一句,如果一个答案是,我可以配置EditText的一些设置,使其在搜索时自动关闭,我仍然想知道软键盘是否可以通过方法调用关闭,因为我在屏幕上也有我自己的搜索按钮(与软键盘无关),我也希望软键盘在按下时也能关闭。

注意:在任何人提出这个问题之前,重复一个前面的问题,我已经看到很多关于隐藏软键盘的问答。 许多答案似乎过于复杂,并且在许多方面不清楚这个想法是永久隐藏键盘还是只是暂时关闭它,直到用户再次点击EditText字段。 还有一些答案需要调用片段中不可用的方法。

在我的片段中,我简单地用这种方法关闭键盘:

public static void closeKeyboard(Context c, IBinder windowToken) { InputMethodManager mgr = (InputMethodManager) c.getSystemService(Context.INPUT_METHOD_SERVICE); mgr.hideSoftInputFromWindow(windowToken, 0); } closeKeyboard(getActivity(), yourEditText.getWindowToken()); 

这是工作代码隐藏Android软键盘。

 try { InputMethodManager input = (InputMethodManager) activity .getSystemService(Activity.INPUT_METHOD_SERVICE); input.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); }catch(Exception e) { e.printStackTrace(); } 

我在一个片段中使用这个代码

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

当我点击一个动作栏图标,它的工作,我不明白为什么它不应该在你的情况下工作(也许我误解了这个问题)。

你可以在这里查看我的答案。 这是在片段内为我工作的唯一方式。

关闭某个片段中的EditText的键盘和清晰焦点的一个明确方法是确保您的EditText XML具有:

 android:id="@+id/myEditText" android:imeOptions="actionDone" 

然后将监听器设置为您的EditText(使用Kotlin和片段):

 myEditText.setOnEditorActionListener({ v, actionId, event -> if (actionId == EditorInfo.IME_ACTION_DONE) { myEditText.clearFocus() val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(view!!.windowToken, 0) } false }) 

在片段工作

  getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);