防止Android键盘形式导致滞后

时间:2014-03-24 20:48:35

标签: java android android-fragments keyboard

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

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显示,从而使其外观变得模糊。有没有人知道如何在不调用服务的情况下隐藏键盘,或者我应该调用Async进程?更好的是,是否有人知道onBackPressed()如何移除键盘?

1 个答案:

答案 0 :(得分:0)

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

  • 使用InputMethodManager以编程方式执行(据我所知,总是要求您调用.getSystemService())
  • 使用android:windowSoftInputMode =“X”指定AndroidManifest中给定活动标签上下文中键盘的行为

所以回答你的问题:“有没有人知道如何在不调用服务的情况下隐藏键盘”?您可以在AndroidManifest中执行以下操作,其中ActivityX是您希望此类行为的活动。

<强>的AndroidManifest.xml:

<activity
    android:name="com.namespace.of.ActivityXYZ"
    android:windowSoftInputMode="stateHidden" />

这将用于最初为ActivityX隐藏键盘,但我不确定这是否会在滑动以完成片段时为您提供所需的行为/缺乏滞后性。还可以尝试将“stateHidden”更改为“stateAlwaysHidden”或“stateUnchanged”。如果您不知道,请查看这些内容here

另一种方法是:不是检查焦点并以编程方式获得键盘,为什么不完成()管理您希望结束的片段的活动?如果键盘打开,它也会隐藏键盘。

希望这有帮助!