从另一个应用返回共享时如何在onsume上隐藏键盘

时间:2019-05-17 05:53:13

标签: java android android-softkeyboard

我正在使用android默认共享功能将文本共享给其他应用程序

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, sharingString);
shareIntent.setType("text/plain");
startActivity(shareIntent);

问题:

当我共享到另一个应用程序(即WhatsApp,Slack等)时,在该应用程序中打开键盘(即编辑消息等),然后发送或返回到我的应用程序。在某些情况下,键盘在该应用中保持打开状态,当我尝试使用以下代码在简历上关闭键盘时,该键盘将无法正常工作。

public static void hideKeyBoard(Activity activity, View view) {

    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);

    if (view == null) {
        view = new View(activity);
    }
    if (imm != null) {

        if(view.getWindowToken()!=null)
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);

        if(view.getApplicationWindowToken()!=null)
            imm.hideSoftInputFromWindow(view.getApplicationWindowToken(), 0);

    }
    view.clearFocus();
}

并从片段的onResume()调用函数

if(getActivity()!=null){
    Utils.hideKeyBoard(getActivity(),getActivity().getCurrentFocus());
}

我找到了许多与隐藏键盘有关的答案,但是在这种情况下,任何答案均无效。

注意:在通常情况下,当我使用hideKeyBoard()方法时,它运行良好。只是这种情况不起作用。谁能帮我吗?

修改 正如我上面提到的。在上面的注释中解释了为什么这个问题不像先前回答的那样。因此,请让Plesase阅读。而且我还尝试了this链接。但不起作用。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用以下可能对您有帮助的代码。

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

这是一些奖励

创建活动实例,而不要在片段上使用getActivity()方法。当片段不可见时,getActivity()返回null

关于片段主机活动

public static MainActivity mainActivity;
public static MainActivity getInstance() {
    return mainActivity;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mainActivity = this;
}

onResume()通话hideKeyboard(MainActivity.getInstance())

此外,请不要忘记在您的android:windowSoftInputMode="stateAlwaysHidden"中添加Manifest