如何检查用户是不是可以看到视图[重复]
Posted
技术标签:
【中文标题】如何检查用户是不是可以看到视图[重复]【英文标题】:how to check if view is visible to user [duplicate]如何检查用户是否可以看到视图[重复] 【发布时间】:2013-10-09 10:06:29 【问题描述】:我的研究把我带入了死胡同。
有一个活动,其中显然有视图。
有多种方法可以检查用户在屏幕上是否可以看到视图,或者是否超出屏幕范围。
但这里有另一种情况:有相对布局,一个view故意重叠另一个view,或者activity中有弹窗。
方法,用于检查视图是否可见(包括 getLocationOnScreen、getLocalVisibleRect、getHitRect、getDrawingRect),返回值,就好像视图在屏幕上可见一样,尽管事实上它正在与另一个重叠,所以我无法检查用户是否可以看到视图。
有没有办法检查一下?
【问题讨论】:
你为什么需要这个,确切地说?由于我们正在谈论多个窗口,因此在框架中没有办法做到这一点。您可以通过遍历树来实现在同一窗口中检查重叠视图,但这不是框架的一部分。 什么是 android 中的窗口,顺便说一句?是活动吗?因此,Android 框架中没有任何方法可以检查视图是否对最终用户可见,这意味着视图没有超出屏幕范围并且没有重叠。Activity
有一个Window
,Dialog
也有一个。窗口由WindowManager
系统服务管理,您使用它们的界面有限(它主要是装饰视图、面板和 UI 功能,如操作栏,尽管您也有一些较低级别的控制)。应该可以编写适用于所有当前可见窗口的东西,但我相信没有办法开箱即用。
@cheshie 您找到解决方案了吗?
@Sorry Boss,实际上没有。此任务现在已冻结,我正在开发该项目的其他功能。但是,请确保,一旦我有任何解决方案,我会发布它。感谢您的关注。
【参考方案1】:
你可以使用view.isShown()
方法,这个方法返回视图可见状态是结果真视图可见。
【讨论】:
我不知道谁为这个答案 +1,但这是完全错误的。如果您更加小心,那么您可以阅读我的问题,重点是:有什么方法可以检查用户是否可以看到该视图。我知道 View#isShown 方法。它只是检查 View#getVisibility == Visible 与否,这不是我的情况。 你说什么?仔细确定线程的标题。如果 semeone 给了 +1,则表示已找到所需内容。【参考方案2】:你可以试试这个
if (myView.getVisibility() == View.VISIBLE)
// Its visible
else
// Either gone or invisible
希望对你有帮助。
【讨论】:
这应该被接受的答案 否 它不能被接受的答案,因为在问题中明确提到@cheshie 想知道视图是否真的在用户面前。在某些情况下,视图隐藏在其他视图后面,在这种情况下 myView.getVisibility() == View.VISIBLE 仍然返回 true。 哈哈你的回答是对的我不知道你为什么没有积分:D以上是关于如何检查用户是不是可以看到视图[重复]的主要内容,如果未能解决你的问题,请参考以下文章