Android 如何判断一个View在屏幕上可见

发布于 2022-08-24 12:34:42 字数 289 浏览 11 评论 0

自动化测试中,遇到一个问题。

由于存在多个View覆盖,有什么方法,
能判断哪个或哪些View在屏幕上可见,并将屏幕不可见的view过滤掉。

我曾采用

view.hasWindowFocus() && view.getVisibility() == View.VISIBLE && view.isShown()

但这三个条件都不能很好的解决, 即使某个view在下层,屏幕上不可见,但依然能通过我的判断条件。

求帮助。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

惯饮孤独 2022-08-31 12:34:42

就算View被别的View挡住了,也是有可能获取到点击事件或者说被用户看到的。所以这不是根本解决之道。不知道你是想测什么东西。为何要把没有显示在最上层的View给过滤掉

∞梦里开花 2022-08-31 12:34:42

处于什么目的呢

左耳近心 2022-08-31 12:34:42

`private boolean isViewVisible(View host, Rect window, boolean fullVisible) {

// Make sure our host view is attached to a visible window.

if (host.getWindowVisibility() == View.VISIBLE) {

    // An invisible predecessor or one with alpha zero means

// that this view is not visible to the user. Object current = host;
while (current instanceof View) {

        View view = (View) current;

// We have attach info so this view is attached and there is no
// need to check whether we reach to ViewRootImpl on the way up. if (view.getAlpha() <= 0 || view.getVisibility() != View.VISIBLE) {

            return false;

}

        current = view.getParent();

}

    // Check if the view is visible in window.

// host.getWindowVisibleDisplayFrame(mWindowRect); Rect visibleRect = new Rect();
if (fullVisible) {

        // Check if the view is entirely visible.

if (!host.getLocalVisibleRect(visibleRect)) {

            return false;

}

        return visibleRect.top == 0 && visibleRect.left == 0 &&
                visibleRect.bottom == host.getHeight() && visibleRect.right == host.getWidth();

} else {

        // Check if the view is entirely covered by its predecessors.

if (!host.getGlobalVisibleRect(visibleRect)) {

            return false;

}

        return Rect.intersects(window, visibleRect);

}

}
return false;`
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文