【问题标题】:How to close soft keyboard in fragment如何在片段中关闭软键盘
【发布时间】:2013-06-17 06:38:56
【问题描述】:

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

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

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

【问题讨论】:

  • 有趣的是,当您搜索其他帖子时,在 Android 中手动隐藏键盘是非常 WTF-why-my-device-is-not-applied 的问题。如果出现意外情况,我建议您放松一下。或者,更改您的应用 UX。 :(

标签: android


【解决方案1】:

在我的片段中,我只是这样关闭键盘:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我在片段中使用此代码

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          在片段内关闭键盘和清除 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
                  })
          

          【讨论】:

            【解决方案6】:

            在片段中工作

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-12-17
              • 2017-01-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-07
              • 2020-01-19
              • 1970-01-01
              相关资源
              最近更新 更多