Android获取网页视图的高度

Posted

技术标签:

【中文标题】Android获取网页视图的高度【英文标题】:Android get height of web view 【发布时间】:2014-04-15 10:52:23 【问题描述】:

我需要获取 Web 视图的高度,以便以编程方式计算出上边距。我正在使用在手机上运行良好的 AddOnPreDraw 方法,但是一旦我在平板电脑上使用它,它就会返回 null。

ViewTreeObserver viewTreeObserver = topContent.getViewTreeObserver();

    viewTreeObserver.addOnPreDrawListener(new OnPreDrawListener() 

        @Override
        public boolean onPreDraw() 
            int height = topContent.getMeasuredHeight();
            if (height != 0) 
                Log.d("Web View Height", "Continue Height: " + height);
                    RelativeLayout instructions = (RelativeLayout) findViewById(R.id.info_layout);
                    instructions.post(mAddTabletMargin);
            
            topContent.getViewTreeObserver().removeOnPreDrawListener(
                    this);
            return false;
        

    );

所以第一个问题是为什么它可以在手机上运行,​​但不能在平板电脑上运行? 问题 2 有没有其他方法可以用来获取 webvie 的高度?

提前致谢。

【问题讨论】:

【参考方案1】:

这是执行此操作的简单方法。

webView.post(new Runnable() 

        @Override
        public void run() 
            // TODO Auto-generated method stub

            webView.getHeight();
        
    );

【讨论】:

这看起来很完美,但唯一的问题是,为什么我的方法可以在 nexus 5 和三星 Galaxy s4 等手机上运行? 它仍然没有得到高度,它在 webviews 仅在 nexus 7 上绘制之前运行我的 onPreDraw 方法! 这是不可能的,请确保您在 UIthread 上运行此方法 我发现了问题所在,我真的很愚蠢!我将topContent.getViewTreeObserver().removeOnPreDrawListener(this); 移动到if 语句中,然后onPreDraw 方法一直循环直到它得到高度,然后一旦我得到高度,if 语句就被执行,它停止了方法循环,​​然后我可以进行我需要的所有测量,感谢兄弟的帮助。 我可以把它改成一个while循环,直到它达到高度?

以上是关于Android获取网页视图的高度的主要内容,如果未能解决你的问题,请参考以下文章

android - 获取以编程方式创建的视图的估计高度

在Android的网页视图中获取点击的网址

如何获取Android手机底部导航栏的高度

Android以编程方式获取可见布局的高度

如何在android中获取标签内容的高度和宽度?

Android:获取View视图在屏幕绝对位置和坐标方法总结