Android:如何以编程方式取消SearchView的聚焦状态

3

我在布局中添加了一个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的焦点?

1个回答

8

听起来可能是您取消了SearchView的焦点,然后它说“等等,我仍然有焦点,我需要键盘”。activity.getCurrentFocus().clearFocus()清除了焦点吗?


在您发布的源代码中,看起来并没有手动调用clearFocus()。当我查看SearchView的源代码时,发现调用setImeVisibility(这是您想要修改的内容)和clearFocus是两个不同的调用,这意味着手动清除焦点可能会有所帮助。如果没有其他方法,这位用户遇到了类似的问题,尽管所有提出的解决方案都需要您失去当前公开的通用接口。 - Jonathan
1
你真是一个冠军。我完全误解了SearchView的工作方式。感谢你的帮助。 - Brad
1
当然。就这个问题而言,你的理解似乎非常准确(SearchView有一个内部状态)。看起来你只是混淆了焦点请求和键盘显示之间的区别。 - Jonathan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接