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获取网页视图的高度的主要内容,如果未能解决你的问题,请参考以下文章