9

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

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

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

4

6 回答 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());
于 2013-06-20T12:05:48.620 回答
7

这是隐藏安卓软键盘的工作代码。

try {
            InputMethodManager input = (InputMethodManager) activity
                    .getSystemService(Activity.INPUT_METHOD_SERVICE);
            input.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
        }catch(Exception e) {
            e.printStackTrace();
        }
于 2013-06-20T12:04:29.117 回答
2

我在片段中使用此代码

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

当我单击操作栏图标并且它正在工作时,我不明白为什么它在您的情况下不起作用(也许我误解了这个问题)。

于 2013-06-20T12:01:23.357 回答
0

你可以在这里查看我的答案。这是在片段中对我有用的唯一方法。

于 2014-05-29T13:34:37.367 回答
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
        })
于 2017-12-16T11:20:41.030 回答
-1

在片段中工作

    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
于 2017-07-19T09:28:48.857 回答