这是我在我的活动中所做的,以找出我知道在屏幕上端到端拉伸的特定视图子的内容布局(在这种情况下是 web 视图):
首先,继承自 OnGlobalLayoutListener:
public class ContainerActivity extends Activity implements ViewTreeObserver.OnGlobalLayoutListener {
...
接下来,实现监听器接口的 onGlobalLayout 方法(注意我做了一些与计算中缩放倾斜有关的像素计算:
@Override
public void onGlobalLayout() {
int nH = this.mWebView.getHeight();
int nW = this.mWebView.getWidth();
if (nH > 0 && nW > 0)
{
DisplayMetrics oMetrics = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(oMetrics);
nH = (nH * DisplayMetrics.DENSITY_DEFAULT) / oMetrics.densityDpi;
nW = (nW * DisplayMetrics.DENSITY_DEFAULT) / oMetrics.densityDpi;
// do something with nH and nW
this.mWebView.getViewTreeObserver().removeGlobalOnLayoutListener
( this
);
...
}
}
最后,确保告诉 onCreate() 中的视图元素(在本例中为 mWebView)您正在监听布局事件:
this.setContentView(this.mWebView = new WebView(this));
this.mWebView.getViewTreeObserver().addOnGlobalLayoutListener
( this
);
这种方法适用于较旧的 android 版本。我相信 ics+ 为您可以绑定到的每个视图都有一个布局侦听器,因此,将以类似的方式使用。