Android取得コントロールのサイズ

1409 ワード

コントロールのサイズを取得する必要がある場合がありますが、ActivityのonCreate()ライフサイクルメソッドでgetWidth()メソッドとgetHeight()メソッドを呼び出すと、インタフェースが描画されないため、コントロールの幅と高さが得られません.しかし、onWindowFocusChanged(boolean hasFocus)という方法でコントロールのサイズを得ることができます.

@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
int height = titleLeftBtn.getHeight();
int width = titleLeftBtn.getWidth();
}

現在のウィンドウのActivityは、フォーカスが取得または失われたときにこのメソッドを呼び出します.これは、このActivityがユーザーに表示されるかどうかの最良のフラグです.
では、Fragmentについてどうすればいいのでしょうか.FragmentはonWindowFocusChangedのような方法を提供していない.この場合、ViewTreeObserverを使用する必要があります.

ViewTreeObserver observer = layoutIndex.getViewTreeObserver();
observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
if (!isMeasured) {
int layoutHeight = layoutIndex.getMeasuredHeight();
isMeasured = true;
}
return true;
}
});

名前の通り、ビューの変化を傍受する観察者です.以下のインタフェースが提供されているので、自分でテストしてみてください.
interface ViewTreeObserver.OnPreDrawListener
interface ViewTreeObserver.OnGlobalFocusChangeListener
interface ViewTreeObserver.OnGlobalLayoutListener
interface ViewTreeObserver.OnScrollChangedListener
interface ViewTreeObserver.OnTouchModeChangeListener