onClickなどのユーザイベント実行時に取得するならば以下の方法で取得ができる。
mView.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { int width = v.getWidth(); int height = v.getHeight(); } });
これを利用して以下のようにすると正しく取得できない。
@Override public void onCreate(Bundle savedInstanceState) { // ... int width = mView.getWidth();// 0 int height = mView.getHeight();// 0 }
onCreate, onStart, onResumeではレンダリングが終了していないためサイズが0となる。
■解決策
以下のようにViewTreeObserverを利用することでレンダリング後のサイズを取得することができる。
@Override public void onCreate(Bundle savedInstanceState) { // ... ViewTreeObserver viewTreeObserver = mView.getViewTreeObserver(); viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int width = mView.getWidth(); int height = mView.getHeight(); } }); }