有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java防止安卓键盘造成延迟

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

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) 个答案

  1. # 1 楼答案

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

    • 以编程方式使用InputMethodManager,就像您正在做的那样(据我所知,这将始终需要您调用.getSystemService()来使用)
    • 使用android:windowSoftInputMode=“X”在AndroidManifest中指定给定活动标记上下文中的键盘行为

    所以要回答你的问题:“有人知道我如何在不呼叫服务的情况下隐藏键盘吗”?您可以在AndroidManifest中执行以下操作,其中ActivityX是您希望具有这种行为的活动

    AndroidManifest。xml:

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

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

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

    希望这有帮助