【问题标题】:How to hide keyboard in fragment?如何在片段中隐藏键盘?
【发布时间】:2023-04-02 21:35:02
【问题描述】:

我使用这种方法来隐藏键盘。

InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(INPUT_METHOD_SERVICE);
View v = getActivity().getWindow().peekDecorView();
if (null != v) {
    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}

但有时它会抛出 NullPointerException,并且键盘没有隐藏。

sync device with java.util.concurrent.CompletionException: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object androidx.fragment.app.FragmentActivity.getSystemService(java.lang.String)' on a null object reference

我已经通过覆盖方法onAttach保存了活动实例,并使用

activity.getSystemService(INPUT_METHOD_SERVICE);

但它不起作用。

【问题讨论】:

标签: android keyboard fragment


【解决方案1】:

要隐藏键盘,您可以尝试: 注意:要获得 getSystemService,您需要有活动。

public static void hideSoftKeyboard(Activity activity) {
    if (activity != null && activity.getWindow() != null) {
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) {
            imm.hideSoftInputFromWindow(activity.getWindow().getDecorView().getWindowToken(), 0);
        }
    }

}

【讨论】:

    【解决方案2】:

    试试这组代码:

    显示软键盘:

    public void showSoftKeyboard(View view){
    if(view.requestFocus()){
        InputMethodManager imm =(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(view,InputMethodManager.SHOW_IMPLICIT);
    }
    

    您可以强制 Android 使用 InputMethodManager 隐藏虚拟键盘,调用 hideSoftInputFromWindow,传入包含您的编辑字段的窗口的令牌。

    public void hideSoftKeyboard(View view){
      InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
      imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
    

    来自片段或活动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-29
      • 2011-12-17
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多