如何关闭片段中的软键盘

时间:2013-06-20 11:58:58

标签: android

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

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

注意:在任何人急于宣称这个问题是前一个问题的重复之前,我已经看到很多关于在不同点隐藏软键盘的Q& A。许多答案看起来非常复杂,并且很多人不清楚这个想法是永久隐藏键盘还是暂时关闭它直到用户再次点击EditText字段。还有一些答案需要调用片段中没有的方法。

6 个答案:

答案 0 :(得分: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());

答案 1 :(得分:7)

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

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

答案 2 :(得分:2)

我在片段中使用此代码

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

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

答案 3 :(得分:0)

您可以查看我的回答here。这是片段中唯一对我有用的方法。

答案 4 :(得分:0)

关闭片段内EditText的键盘和clearfocus的一种明确方法是确保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
        })

答案 5 :(得分:-1)

在片段中工作

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