C/C++プログラマの管理者が, Androidプログラムにチャレンジ. AndroidプログラミングのTipsをメモっていく予定です.

ビュー(View)のサイズ(横幅, 縦の高さ)は, ビューがレイアウトされ, 見える状態になってからでないと取得できない.



onCreateで取得すると....

ビューの横幅や縦の高さを取得するメソッドは, View#getWidthメソッド, getHeightメソッドであるが, Activity#onCreateメソッドで呼んでも正常な値が取得できない(値は0になる).
この段階では, まだビューが見える状態になっていないのが原因と思われる.

onWindowFocusChangedで取得する

Activity#onWindowFocusChangedメソッドは, ビューが見える状態になってから呼ばれているようなので, ここで取得する.
    • onWindowFocusChangedメソッドをオーバーライドする.
    • findViewByIdメソッドで, サイズを取得したいビューのインスタンスを取得する.
    • View#getWidthメソッド, getHeightメソッドでサイズを取得する.
package com.moonlight_aska.android.getviewsize01;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class GetViewSize01 extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Viewのサイズを取得 → 値の取得不可
    TextView text = (TextView)findViewById(R.id.text_id);
    Log.v("onCreate", "TextView width=" + text.getWidth() + ", height=" + text.getHeight());
  }

  @Override
  public void onWindowFocusChanged(boolean hasFocus) {
    // TODO Auto-generated method stub
    super.onWindowFocusChanged(hasFocus);

    // Viewのサイズを取得
    TextView text = (TextView)findViewById(R.id.text_id);
    Log.v("onWindowFocusChanged", "TextView width=" + text.getWidth() + ", height=" + text.getHeight());
  }
}

このページへのコメント

助かりました。ありがとうございます。

0
Posted by xinox 2017年04月11日(火) 17:49:03 返信

大変参考になりました!ありがとう御座います。

0
Posted by hoge 2010年12月18日(土) 21:58:16 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu


逆引き(基礎編)

画面表示/操作(49)

フラグメント(1)

逆引き(応用編)

Firebase(2)

AD



管理人/副管理人のみ編集できます