画面上で端から端まで伸びていることがわかっている特定の子ビュー (この場合は webview) のコンテンツ レイアウトを把握するために、アクティビティで行ったことは次のとおりです。
まず、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+ には、バインドできるビューごとにレイアウト リスナーがあり、同様の方法で使用されると思います。