关闭按钮上的键盘单击关闭片段

时间:2017-03-28 05:25:35

标签: android android-fragments android-edittext android-softkeyboard

如何在按钮点击时关闭键盘?我有一个片段,它有一个EditText和两个按钮。一个提交EditText内容,另一个只是关闭片段。现在当片段消失时,键盘会停留。但是,按后退键会关闭键盘或点击“完成”键。也关闭它。但我需要的是当片段关闭时键盘消失。

我已尝试过针对类似问题hereherehere的解决方案,但似乎都没有效果。大多数人抛出NullPointerException。一切都是为了活动而不是碎片。调用键盘的代码有效:

editText.requestFocus();
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

但是我必须添加getActivity()才能使其正常工作。

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:12)

使用此方法

public void hideKeyboard() {
    // Check if no view has focus:
    View view = getActivity().getCurrentFocus();
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

答案 1 :(得分:6)

片段

使用以下函数

  public static void hideKeyboard(Activity activity) {
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    //Find the currently focused view, so we can grab the correct window token from it.
    View view = activity.getCurrentFocus();
    //If no view currently has focus, create a new one, just so we can grab a window token from it
    if (view == null) {
        view = new View(activity);
    }
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

单击按钮时调用它

  btn_cancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            hideKeyboard(getActivity());
        }
    });

答案 2 :(得分:3)

尝试以下方法

<ComboBox Grid.Row="0" Grid.Column="1" x:Name="cbx_srchResOrg" HorizontalAlignment="Stretch" Style="{DynamicResource ComboBoxStyle}"
                      ItemsSource="{Binding InfoCombo}" SelectedIndex="0" DisplayMemberPath="Dis_name" SelectedValuePath="Hide_id" SelectedItem="{Binding SelectInfo}"/>

在此方法中,您必须传递上下文参数。希望它会帮助你。

答案 3 :(得分:1)

从先前的答案发展而来,在Kotlin中,使用调用视图来获取窗口令牌。

button.setOnClickListener() { view ->
        hideKeyboard(view)
}

private fun hideKeyboard(view: View) {
    val inputMethodManager = view.context.getSystemService(Activity.INPUT_METHOD_SERVICE)
            as InputMethodManager

    inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
}

经过深思熟虑,不必在每个按钮上都添加此调用,而是可以在失去焦点时清除键盘。

input.setOnFocusChangeListener { view, hasFocus ->
        if(!hasFocus) {
            hideKeyboard(view)
        }
    }