如何在Fragments中隐藏软键盘?

5

我希望在Android的片段中隐藏键盘。因为一旦它显示出来,它会在所有片段中保持可见。我尝试过这种方法。

    public static void hideKeyboard(Context ctx) {
    InputMethodManager inputManager = (InputMethodManager) ctx
            .getSystemService(Context.INPUT_METHOD_SERVICE);

    // check if no view has focus:
    View v = ((Activity) ctx).getCurrentFocus();
    if (v == null)
        return;

    inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}

并在按钮点击时调用此方法

signIn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                hideKeyboard(ctx);
                login();


        }
    });

但是这会出现错误 "java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法'java.lang.Object android.content.Context.getSystemService(java.lang.String)'"。

为什么你要试图找到某个视图?将View v作为参数传递给你的hideKeyboard方法,v.getContext()会给你正确的上下文,这只需要两行代码的方法。 - Viktor Yakunin
你是否已经使用上下文对象初始化或给 ctx 赋值了? - Wei
@ViktorYakunin 请用代码详细说明您的答案... - Abdulmateen Ch.
可能是关闭/隐藏Android软键盘的重复问题。 - Viktor Yakunin
5个回答

12

对于Java:

试试这个。

public static void hideSoftKeyboard(Activity activity) {
        if (activity.getCurrentFocus() == null) {
            return;
        }
        InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
    }

要调用此函数,只需从按钮的onclick中传递以下代码即可

signIn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
               hideSoftKeyboard(getActivity());
                login();


        }
    });

对于 Kotlin

fun hideSoftKeyboard(activity:Activity) {
  if (activity.getCurrentFocus() == null){
    return
  }
  val inputMethodManager = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
  inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0)
}

在按钮的onclick事件中加入以下代码

signIn.setOnClickListener(object:View.OnClickListener() {
  fun onClick(v:View) {
    hideSoftKeyboard(getActivity())
    login()
  }
})

这在片段中不起作用,在Mate 20 Pro设备上。 - Nao Kreuzeder

3
signIn.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
       hideKeyboard(v);
       login();
   }
});

还有一些实用类中的隐藏键盘方法

public static void hideKeyboard(@NonNull View v) {
    InputMethodManager inputManager = (InputMethodManager) v.getContext()
            .getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}

0

使用片段视图的窗口令牌隐藏它

Kotlin 版本 -

if (activity != null){
    // Hide soft keyboard
    val imm =
        activity!!.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(requireView().windowToken, 0)
}

0

适用于Kotlin用户 创建一个文件并添加以下代码

fun hideSoftKeyboard(activity: Activity) {
    if (activity.currentFocus == null) {
        return
    }
    val inputMethodManager =
        activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(activity.currentFocus!!.windowToken, 0)
}

现在可以在任何地方使用此方法进行调用

hideSoftKeyboard(requireActivity())

编程愉快..NB for kotlin


-1

试试这个:

View view = this.getCurrentFocus();
if (view != null) {
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

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