如何在不实现 OnFocusChangeListener 的情况下检测 EditText 上的焦点丢失事件

How to detect focus lost event on an EditText without implementing OnFocusChangeListener

我正在使用具有 EditText 的库,我需要检测此 EditText 何时失去焦点。 该库已在此 EditText 上添加了一个 OnFocusChangeListener,因此我无法覆盖此侦听器,因为它会破坏功能。

是否有任何其他方法来检测用户何时失去对 EditText 的关注?

解决方案:

ViewTreeObserver viewTreeObserver = getViewTreeObserver();
viewTreeObserver.addOnGlobalFocusChangeListener(new ViewTreeObserver.OnGlobalFocusChangeListener() {
    @Override
    public void onGlobalFocusChanged(View oldFocus, View newFocus) {
        //oldFocus could be null
        if (oldFocus == null || !oldFocus.equals(myEditText)) {
            return;
        }
        doYourThing();
    }
});

您可以在 ViewTreeObserver class 中使用 OnGlobalFocusChangeListener。它公开了一个方法onGlobalFocusChanged(View oldFocus, View newFocus)。您只需要检查 oldFocus 是否是您感兴趣的视图。

您可以在此 EditText 上已实现的 OnFocusChangeListener 中传递全局布尔标志。

像布尔值这样的全局变量 isViewOnFocus = false;

并在 OnFocuChangeListener 中更改其值。我相信这个小小的改变不会造成任何问题