侦听器,以检测视图是否在最前面?
作者:互联网
我有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