其他分享
首页 > 其他分享> > 侦听器,以检测视图是否在最前面?

侦听器,以检测视图是否在最前面?

作者:互联网

我有RecyclerView,在某些情况下,我在其上面显示了另一个视图-ProgressDialog,AlertDialog或DialogFragment.

有什么方法可以通知我有关RecyclerView位于前面还是另一个视图位于上面的情况?

我试图将onFocusChangeListener()添加到我的RecyclerView中,但是没有运气.

PS.可以肯定的是,我可以在RecyclerView中创建一些方法isOnFront(boolean onFront),并在所有其他视图中调用它,但是也许还有一些更优雅的方法吗?

解决方法:

ProgressDialog,AlertDialog和DialogFragment会将其内容放置在Window上,而不放置在活动/片段的视图层次结构中.这意味着,一旦显示了它们中的任何一个,Window的焦点就会改变.因此,您可以使用ViewTreeObserver#addOnWindowFocusChangeListener() API:


    contentView.getViewTreeObserver().addOnWindowFocusChangeListener(
        new ViewTreeObserver.OnWindowFocusChangeListener() {
          @Override public void onWindowFocusChanged(boolean hasFocus) {
            // Remove observer when no longer needed
            // contentView.getViewTreeObserver().removeOnWindowFocusChangeListener(this);

            if (hasFocus) {
              // Your view hierarchy is in the front
            } else {
              // There is some other view on top of your view hierarchy,
              // which resulted in losing the focus of window
            }
          }
        });

标签:focus,android-view,android-window,android
来源: https://codeday.me/bug/20191111/2019156.html