Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止android键盘造成延迟_Java_Android_Android Fragments_Keyboard - Fatal编程技术网

Java 防止android键盘造成延迟

Java 防止android键盘造成延迟,java,android,android-fragments,keyboard,Java,Android,Android Fragments,Keyboard,我试图使用滑动手势来完成片段,如果片段显示键盘,键盘将隐藏。以下是一个示例: public void finishFragment() { View focus = getCurrentFocus(); InputMethodManager imm = null; if (focus != null) { imm = (InputMethodManager) focus.getContext(). getSystemServ

我试图使用滑动手势来完成片段,如果片段显示键盘,键盘将隐藏。以下是一个示例:

public void finishFragment() {
    View focus = getCurrentFocus();
    InputMethodManager imm = null;
    if (focus != null) {
        imm = (InputMethodManager) focus.getContext().
                getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm.isActive()) {
            imm.hideSoftInputFromWindow(focus.getWindowToken(), 0);
        }
    }
    if (getFragmentManager().getBackStackEntryCount() > 1) {
        getFragmentManager().popBackStack();
    }
}

不幸的是,由于我沿着片段堆栈调用了一个服务,该服务挂起了UI显示,因此给了它一个滞后的外观。有人知道我如何在不调用服务的情况下隐藏键盘吗?或者我应该调用
异步进程吗?更好的是,有人知道如何
onBackPressed()
移除键盘吗?

在Android上控制键盘的方法只有两种:

  • 以编程方式使用InputMethodManager,就像您正在做的那样(据我所知,这将始终需要您调用.getSystemService()来使用)
  • 使用android:windowSoftInputMode=“X”在AndroidManifest中指定给定活动标记上下文中的键盘行为
所以要回答你的问题:“有人知道我如何在不呼叫服务的情况下隐藏键盘吗?”?您可以在AndroidManifest中执行以下操作,其中ActivityX是您希望具有此类行为的活动

AndroidManifest.xml:

<activity
    android:name="com.namespace.of.ActivityXYZ"
    android:windowSoftInputMode="stateHidden" />
如果您不知道

另一种方法是:与其像您正在做的那样以编程方式检查焦点和获取键盘,为什么不直接完成()管理您希望结束的片段的活动?如果键盘处于打开状态,这也将隐藏键盘

希望这有帮助