如何关闭Fragment中的软键盘

9
我有一个EditText位于fragment中,而该fragment又位于actionbarsherlock选项卡中。当我点击EditText框时,会出现一个带有放大镜(搜索)图标的软键盘。当我输入一些文本并单击搜索键时,可以在我的onEditorAction中处理输入的字符串,但软键盘仍然显示。如何通过编程方式关闭它?
顺便说一句,如果有人回答说我可以配置一些EditText设置,使其在搜索时自动关闭,那么我还想知道是否可以通过方法调用关闭软键盘,因为我还有自己的搜索按钮(与软键盘无关),当按下该按钮时,我希望软键盘也关闭。
注意:在任何人急于声称这个问题是以前问题的重复之前,请注意我已经看到了许多关于在各个点隐藏软键盘的问答。许多答案似乎过于复杂,并且在许多答案中不清楚的是,是否要永久隐藏键盘,还是只是暂时关闭它,直到用户再次点击EditText字段。此外,一些答案需要调用片段中不可用的方法。

有趣的是,当你搜索其他帖子时,手动隐藏Android键盘非常令人困惑-为什么我的设备没有应用的问题。我建议你在意外情况下放松心情。或者,改变你的应用程序用户体验。 :( - Youngjae
6个回答

39

在我的代码片段中,我通过以下方式简单地关闭键盘:

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());

7
这是隐藏安卓软键盘的可用代码。
try {
            InputMethodManager input = (InputMethodManager) activity
                    .getSystemService(Activity.INPUT_METHOD_SERVICE);
            input.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
        }catch(Exception e) {
            e.printStackTrace();
        }

2
我正在一个fragment中使用这段代码。
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(
                            Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(text.getWindowToken(), 0);

当我点击操作栏图标并且它能够正常工作时,我不明白为什么在你的情况下不能正常工作(也许我误解了问题)。


0
一个清晰的关闭键盘并清除 Fragment 中 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
        })

0

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


-1

在 Fragment 中工作

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

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