【问题标题】:Android: How to unfocus a SearchView programmaticallyAndroid:如何以编程方式使 SearchView 失焦
【发布时间】:2013-07-12 19:39:43
【问题描述】:

我的布局中有一个 SearchView(不是在操作栏中),我无法使用通常的方法关闭键盘:

public static void hideKeyboard(Activity activity) {
    InputMethodManager imm = (InputMethodManager)activity
            .getSystemService(Context.INPUT_METHOD_SERVICE);

    if (imm != null && activity != null) {
        View currentFocus = activity.getCurrentFocus();

        if (currentFocus != null) {
            imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), 0);
        }
    }
}

SearchView 保持其焦点状态。在旧设备上使用此方法会显示键盘被关闭然后重新显示。

我认为问题在于 SearchView 实际上是在内部维护自己状态的视图层次结构。

如何关闭键盘并使 SearchView 失去焦点?

【问题讨论】:

    标签: android actionbarsherlock


    【解决方案1】:

    听起来可能发生的事情是您没有聚焦 SearchView,然后它说“哦等等,我仍然有焦点,我需要键盘”。 activity.getCurrentFocus().clearFocus() 是否清除焦点?

    【讨论】:

    • 在您发布的源代码中,您似乎没有手动调用 clearFocus()。当我查看 SearchView 的源代码时,看起来对 setImeVisibility(这是您要在此处修改的内容)和 clearFocus 的调用是两个独立的,这意味着您自己手动清除焦点可能会有所帮助。除此之外,this user 也有类似的问题,尽管所有建议的解决方案都要求您丢失当前公开的通用接口。
    • 您先生是冠军。我完全误解了 SearchView 的工作方式。感谢您的帮助。
    • 当然。对于它的价值,实际上看起来您对 SearchView 的工作方式非常了解(有一个内部状态)。看起来您刚刚对请求的焦点和显示的键盘之间的区别感到困惑。
    猜你喜欢
    • 2013-01-30
    • 2017-10-18
    • 2013-07-04
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多