我关闭DialogFragment后键盘弹出

时间:2019-02-08 11:47:37

标签: android

在我的片段中,我调用一个DialogFragment,然后调用

getDialog().dismiss();

并将其保存在我的onDismiss()

@Override
public void onDismiss(DialogInterface dialog)
{

    InputMethodManager imm =
            (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm.isActive())
        imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

    super.onDismiss(dialog);
}

但是由于某种原因,当我回到该片段时,似乎已经弹出了键盘,我尝试了各种尝试,包括试图将键盘隐藏在片段的回调中,但是似乎没有任何作用。

3 个答案:

答案 0 :(得分:1)

  

在我的片段中,我打电话给DialogFragment,然后打电话给

尝试一下:

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

在您的代码中

@Override
    public void onDismiss(DialogInterface dialog)
    {
        super.onDismiss(dialog);
        hideKeyboard(getActivity());
    }

在清单文件中使用stateAlwaysHidden

    <activity
        android:screenOrientation="portrait"
        android:name=".chat.activity.ChatActivity"
        android:windowSoftInputMode="stateAlwaysHidden|adjustResize">

    </activity>

答案 1 :(得分:0)

因为您正在使用toggleSoftInput(int showFlags, int hideFlags)来切换软键盘的状态。来自文档

This method toggles the input method window display. 

您可以使用hideSoftInputFromWindow()来强制Android使用InputMethodManager隐藏虚拟键盘,调用hideSoftInputFromWindow,传入包含您关注的view的窗口令牌。

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

答案 2 :(得分:0)

如果您位于片段中,请尝试以下代码

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

或者如果您正在活动中:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWaYS_HIDDEN);

请确保在设置内容视图之前或在扩展视图之前执行该操作